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;
}

全部评论

相关推荐

牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务