题目描述
输入
输出
样例输入
2000 12 31
样例输出
366
提示
来源
两种方法:
第一种方法理解起来比较容易,但是代码好像比较长,具体实现起来就是把截止到每一个月份末的天数都保存在一个数组里,然后用switch语句进行分支判断。
#include<stdio.h>
struct
{
int y;
int m;
int d;
}d;
void main()
{
int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年
int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年
scanf("%d %d %d",&d.y,&d.m,&d.d);
if(d.y%100==0)
{
if(d.y%400==0)
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
else
{
if(d.y%4==0)
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
}
/**************************************************************
Problem: 1100
User: 171530425
Language: C
Result: 正确
Time:0 ms
Memory:1092 kb
****************************************************************/
我们也可以对上面的if判断做下优化,把所有闰年的情况放在一个if判断语句的判断体中,这样的话代码就少了一点儿
#include<stdio.h>
struct
{
int y;
int m;
int d;
}d;
void main()
{
int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年
int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年
scanf("%d %d %d",&d.y,&d.m,&d.d);
if((d.y%100==0&&d.y%400==0)||(d.y%4==0&&d.y%100!=0))
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
第二种实现方法可能不太好理解,但是却实现起来却比较简单,我们不用提前算截至每一月末的天数了,并且代码也比较短
#include<stdio.h>
struct ri
{
int y,m,d;
}p;
int main()
{
int i,j,s=0,a=31,b=30,c=29;
scanf("%d%d%d",&p.y,&p.m,&p.d);
for(i=1;i<p.m;i++)//注意这里一定是小于p.m,因为我们要算的是截止上个月末的天数,当前月还没过完呢,并且给的有当前月的天数,保存在p.d中
{
if(i==1||i==3||i==5||i==7||i==8||i==10)
{
s+=a;
}
else if(i==4||i==6||i==9||i==11)
{
s+=b;
}
else if(i==2)
{
s+=c;
}
}
s=s+p.d;
if((p.y%4==0&&p.y%100!=0)||(p.y%400==0&&p.y%100==0))
{
if(p.m==1)
{
printf("%d",p.d);
}
else
{
printf("%d",s);
}
}
else
{
if(p.m==1)
{
printf("%d",p.d);
}
else
{
printf("%d",s-1);
}
}
return 0;
}