1878: 蛤玮准备礼物
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 850 Solved: 138
Submit Status Web Board
Description
蛤玮的妹子要过生日了,经过千挑万选,蛤玮决定给妹子买一盒水彩铅笔,然而卖多少个才合适呢.机智的蛤玮决定数一数今天是妹子出生的第多少天,然后就买那么多根铅笔.
给出蛤玮妹子的生日和今天的日期,求蛤玮一共需要买多少.
注意:生日当天算第0天.
Input
T(1<=T<=1000),表示数据组数.
每组数据一行y1,m1,d1,y2,m2,d2,其中y1,m1,d1表示妹子生日的年月日,y2,m2,d2表示蛤玮所在时空的当前天的年月日.
(1900<=y<=1000000, 1<=m<=12, 1<=d<=当月应有天数).输入保证当前天在妹子生日之后.
Output
每组数据输出一行,蛤玮要买多少根铅笔.
Sample Input
2 1995 10 24 1995 10 25 1996 1 9 1996 3 7
Sample Output
1 58
HINT
Source
思路:首先
1900<=y<=1000000 数比较大,直接算 就会超时,所以要优化,每400年为1闰年,利用这个减少计算的次数。
这样的计算天数的题很考验自己的模拟能力
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool judge(int x)//判断闰年
{
if((x%4==0&&x%100!=0)||x%400==0)
return true;
return false;
}
int day(int x,int y)//返回每月的天数
{
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
return 31;
else if(judge(x)==true&&y==2)
return 29;
else if(judge(x)==false&&y==2)
return 28;
else return 30;
}
int main()
{
int t;
int sum,a,b,c,x,y,z,i,j,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
int num1=0;
int num2=0;
for(i=1;i<b;i++)
num1+=day(a,i);
num1+=c;
for(i=1;i<y;i++)
num2+=day(x,i);
num2+=z;
if(a==x)//同一年
{
printf("%d\n",num2-num1);
}
else
{
sum=0;
if(judge(a)==true)
sum+=(366-num1+num2);
else
sum+=(365-num1+num2);
if((x-1-(a+1))>400)//每400年一循环
{
int flag=(x-1-(a+1))/400;
int sum1=0;
for(i=a+1;i<=a+400;i++)
{
if(judge(i)==true)
sum1+=366;
else sum1+=365;
}
sum+=flag*sum1;
int year=a+1+flag*400;
for(i=year;i<=x-1;i++)
{
if(judge(i)==true)
sum+=366;
else sum+=365;
}
}
else
{
for(i=a+1;i<x;i++)
{
if(judge(i)==true)
sum+=366;
else sum+=365;
}
}
printf("%d\n",sum);
}
}
return 0;
}