题目:
请你计算出 x年 y月 z 日是 x 年的第几天。(请注意闰年对答案的影响)
输入格式一行三个整数,x,y 和 z。(1583le xle 21001583≤x≤2100)。数据保证输入合法。
输出格式一个整数,表示是第几天。
【解题思路】
首先运用一个switch case 语句,将12月份设置为case,在switch case语句中用平年,随后再用一个if else判断z是否为闰平年,如果输入的z是闰年且月份y要大于2,则在天数上加一即可。代码如下:
#includeint main(){ int y,x; int n=0; scanf("%d %d",&y,&x); switch(y){ case 12: n+=30; case 11: n+=31; case 10: n+=30; case 9: n+=31; case 8: n+=31; case 7: n+=30; case 6: n+=31; case 5: n+=30; case 4: n+=31; case 3: n+=28; case 2: n+=31; case 1: n+=x; } int z=0; scanf("%d",&z); if((z%4==0 && z%100!=0 || z%400==0) && y>=3){ printf("%d+1",x); }else{ printf("%d",x); } return 0; }
对以上的代码进行优化,得出以下代码:
#includeint main() { int x, y, z; int s=0; scanf ("%d %d %d", &x, &y, &z); switch(y) { case 12: s+=30; case 11: s+=31; case 10: s+=30; case 9: s+=31; case 8: s+=31; case 7: s+=30; case 6: s+=31; case 5: s+=30; case 4: s+=31; case 3: s+=28; case 2: s+=31; case 1: s+=z; } if((x%4==0 && x%100!=0 || x%400==0) && y>=3) s++; printf("%dn",s); return 0; }
完事!



