刚开始写的代码都是超时。只有把月份罗列在数组里才不会超时。(我也不知道为什么。。。)
第几天?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 52596 Accepted Submission(s): 19841
Problem Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
1985/1/20
2006/3/12
Sample Output
Author
lcy
Source
//超时。 #include<iostream>using namespace std;int main(){ int y,m,d,date; while(scanf("%d/%d/%d",&y,&m,&d)&&y&&m&&d) { date=0; int feb,mm=0; if(y%4==0||(y%100!=0&&y%400==0)) feb=29; //闰年 else feb=28; if(m==1) mm=0; else for(int
i=1;i<m;i++) { if(i==2) mm+=feb; else if(i==4||i==6||i==9||i==11) mm+=30; else mm+=31; } date+=d+mm; cout<<date<<endl; }return 0;}
//A 了。
#include<stdio.h>
int main()
{
//只有罗列出来,才能通过。
int year,month,day;
int s[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}};
while(scanf("%d/%d/%d",&year,&month,&day)==3)
{
int leap=0;
if(year%4==0&&year%100!=0||year%400==0)
leap=1;
int sum=0;
int i;
for(i=1;i<month;i++)
{
sum+=s[leap][i];
}
sum+=day;
printf("%d\n",sum);
}
return 0;
}