题目:
请你计算出?x年?y月?z?日是?x?年的第几天。(请注意闰年对答案的影响)
输入格式
一行三个整数,x,y?和?z。(1583\le x\le 21001583≤x≤2100)。数据保证输入合法。
输出格式
一个整数,表示是第几天。
【解题思路】
首先运用一个switch case 语句,将12月份设置为case,在switch case语句中用平年,随后再用一个if else判断z是否为闰平年,如果输入的z是闰年且月份y要大于2,则在天数上加一即可。代码如下:
#include <stdio.h>
int 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;
}
对以上的代码进行优化,得出以下代码:
#include <stdio.h>
int 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("%d\n",s);
return 0;
}
完事!
|