Online Judge【NYOJ】[1075]日期计算问题描述 问题分析又是一个涉及到闰年判断的题目不过现在看 应该已经难不倒我了 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include<stdio.h> int main() { int T; scanf("%d",&T); while(T--) { int month[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,d; scanf("%d %d %d",&y,&m,&d); if(y%400==0||(y%100&&y%4==0)) month[1]++; int sum=0; for(int i=0; i<m-1; i++) { sum+=month[i]; } printf("%d\n",sum+d); } return 0; }标程的亮点是通过switch运行到底的特性(不遇到break;便会继续运行下一个case)巧妙地区分了31天与30天的年份 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include<stdio.h> int main() { int a,b=0,c,y,m,d,fib; scanf("%d",&a); while(a--) { scanf("%d %d %d",&y,&m,&d); if(y%400==0||y%100!=0&&y%4==0) fib=29; else fib=28; for(c=1; c<=m; c++) switch(c-1) { case 1: case 3: case 5: case 7: case 8: case 10: b+=31; break; case 2: b+=fib; break; case 4: case 6: case 9: case 11: b+=30; break; } b+=d; printf("%d\n",b); b=0; } return 0; }题目地址:日期计算