HDOJ 2005 第几天?

第几天?

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 94388    Accepted Submission(s): 35517


 

Problem Description

给定一个日期,输出这个日期是该年的第几天。

Input

输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

Output

对于每组输入数据,输出一行,表示该日期是该年的第几天。

Sample Input
1985/1/20
2006/3/12

Sample Output
20
71

幸幸苦苦写好了

#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define N 130
int dayOfMonth[2][13] = {//一开始的时候[],什么的都用上了,哈哈 
	{					//基础不牢地动山摇 
		0,31,28 ,31,30 ,31,30 ,31,31,30 ,31,30 ,31//平年 
	},{
		0,31,29 ,31,30 ,31,30 ,31,31,30 ,31,30 ,31//润年 
	}
};
int isPing(int year){//判断平年还是闰年 
	if((year%4 == 0 && year%100 != 0) || year % 400 == 0)
		return 1;
	return 0;
}

int main()
{
    int i,n,k,j,year,month,day,ping;
    int date[3],start[3];
    char temp[10];
    char str[30];
    char * token = NULL;
    gets(str);
    token = strtok(str,"/");
    i=0;
    memset(date,0,sizeof(date));//date保存年、月、日 
    while(token != NULL){
    	for(j=0; *(token+j) != '\0'; j++){}//记录字符串的长度 
    	for(j--,k=0;j>=0;j--,k++){//倒序输出,便于计算数值 
    		date[i] += (*(token+j) - '0')*pow(10,k);
		}
		i++;
    	token = strtok(NULL, "/");//一直不理解为什么传的参数是NULL,干就对了 
	}
	start[1] = 1;//从当年一月一号开始计数 
	start[2] = 1;
	day=0;
	ping = isPing(date[0]);//不更新年,所以放在外面执行一次就好 
	while((start[1] < date[1]) || (start[2] <= date[2])){
		day++;
		start[2]++;
		if(dayOfMonth[ping][start[1]] < start[2]){
			start[1]++;
			start[2]=1;//第一次写好的时候忘记重置日的值了 
		}
	} 
	printf("%d\n",day);
    return 0;
}

为了找存在感就看了看其他人的代码,欲哭无泪啊,没有对比就没有伤害

#include<stdio.h>
int main()
{
	int y,m,d,day;
    while(scanf("%d/%d/%d",&y,&m,&d)!=EOF)
    {
    	day=0;
    	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//每次闰年会让二月份的值变化 
    	if((y%4==0&&y%100!=0)||y%400==0)//判断闰年
    	    a[2]++;
    	for(y=1;y<m;y++)
    	    day=day+a[y];
    	day=day+d;
    	printf("%d\n",day);
    }
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/u013862444/article/details/81175880
今日推荐