sdnu1341(日期)
virgo’s winter vacation
Description
2017年1月15日是山师放寒假的日子,撒花,撒花。为此Virgo决定设计一个程序,来还有多少天回家:给出某一天的日期year-month-date, 求这一天
到2017-1-15还差几天。
Input
第一行有个整数T, 表示测试组数。T≦100。接下来每个测试组,给出三个数year month date。(1900 <=year <=2017 ), 保证每个日期均合法,并且小于2017-1-15。
Output
对于每个测试组,请输出对应的答案。
Sample Input
3
2010 10 11
2011 10 11
2012 10 11
Sample Output
2288
1923
1557
注意是差多少天,1号和3号差1天
日常注意闰年
#include<bits/stdc++.h>
using namespace std;
bool judge(int n)
{
if(n%4==0&&n%100!=0)
return 1;
else if(n%400==0)
return 1;
else
return 0;
}
int a[13]= {
0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int n,t,i,ans,year,mon,day;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%d%d%d",&year,&mon,&day);
if(mon>1||(mon==1&&day>15))///日期在1月15日之后
{
for(i=year+1; i<2017; i++)///先从下一年的1月15日算起至2017年1月15日
{
ans+=365;
if(judge(i))
ans++;
}
for(i=mon+1; i<=12; i++)///再算第一年下一个月到第一年末
ans+=a[i];
ans+=15;///加上下一年的头15天
ans+=a[mon]-day+1;///本月剩余
if(mon<=2&&day<=29)
ans++;
}
else
{
for(i=year; i<2017; i++)///日期在1月15日前,从第一天直接加到2017年的这一天
{
ans+=365;
if(judge(i))
ans++;
}
ans+=15-day+1;///到2017年15号还有多少天
}
cout<<ans-1<<'\n';///因为求差的天数,要减一
}
return 0;
}