(1915) 第几天 Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input 2000-01-01 Sample Output 1
[参考解答] (1)
#include "stdio.h" int main() { int y,m,d; //分别代表年月日 int days; //计算得到的天数 while (scanf("%d-%d-%d",&y,&m,&d)!=EOF) { days=d; //下面要加上前m-1月的天数 int i; for(i=1; i<m; i++) { switch(i) { case 2: days+=((y%4==0&&y0!=0)||y@0==0)?29:28; break; case 4: case 6: case 9: case 11: days+=30; break; default: days+=31; break; } } printf("%d\n",days); } return 0; }(2)
#include "stdio.h" int main() { int y,m,d; //分别代表年月日 int days; //计算得到的天数 int i; while (scanf("%d-%d-%d",&y,&m,&d)!=EOF) { days=d; //下面要加上前m-1月的天数 for(i=1; i<m; i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) days+=31; else if (i==4||i==6||i==9||i==11) days+=30; else days+=((y%4==0&&y0!=0)||y@0==0)?29:28; } printf("%d\n",days); } return 0; }(3)后面要学习数组。然后就可以这样来了(对数组充满期待吧)
#include "stdio.h" int main() { int y,m,d; //分别代表年月日 int days; //计算得到的天数 int i; int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31}; while (scanf("%d-%d-%d",&y,&m,&d)!=EOF) { days=d; //下面要加上前m-1月的天数 for(i=1; i<m; i++) { days+=a[i]; } if(m>2&&((y%4==0&&y0!=0)||y@0==0)) //若闰年,且晚于2月,加一天 days++; printf("%d\n",days); } return 0; }(4)有同学写成下面的代码,结果对,但这样的程序的确不好
#include "stdio.h" int main() { int y,m,d; //分别代表年月日 int days; //计算得到的天数 while (scanf("%d-%d-%d",&y,&m,&d)!=EOF) { if(((y%4==0)&&(y0!=0))||(y@0==0)) { switch(m) { case 1: days=d; break; case 2: days=d+31; break; case 3: days=d+31+29; break; case 4: days=d+31+29+31; break; case 5: days=d+31+29+31+30; break; case 6: days=d+31+29+31+30+31; break; case 7: days=d+31+29+31+30+31+30; break; case 8: days=d+31+29+31+30+31+30+31; break; case 9: days=d+31+29+31+30+31+30+31+31; break; case 10: days=d+31+29+31+30+31+30+31+31+30; break; case 11: days=d+31+29+31+30+31+30+31+31+30+31; break; case 12: days=d+31+29+31+30+31+30+31+31+30+31+30; break; } } else { switch(m) { case 1: days=d; break; case 2: days=d+31; break; case 3: days=d+31+28; break; case 4: days=d+31+28+31; break; case 5: days=d+31+28+31+30; break; case 6: days=d+31+28+31+30+31; break; case 7: days=d+31+28+31+30+31+30; break; case 8: days=d+31+28+31+30+31+30+31; break; case 9: days=d+31+28+31+30+31+30+31+31; break; case 10: days=d+31+28+31+30+31+30+31+31+30; break; case 11: days=d+31+28+31+30+31+30+31+31+30+31; break; case 12: days=d+31+28+31+30+31+30+31+31+30+31+30; break; } } printf("%d\n",days); } return 0; }