节日

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector> 
#include<string>
#include<queue>
#include<map>
using namespace std;
bool IsRun(int y)
{
    if((y%4==0 && y%100!=0)||y%400==0)
        return true;
    else
        return false;
}
int main()
{
    int a,b,c,y1,y2;
    cin>>a>>b>>c>>y1>>y2;
    int d1=0,d2=0,d3=0;
    for(int i=1850;i<y1;i++)
    {
        if(IsRun(i))    d1+=366;
        else            d1+=365;
    } 
    //此时d1即 y1年1月1日距1850年1月1日的天数 
    
    int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    for(int i=0;i<a-1;i++)
    {
        d2 += m[i];
    } 
    //此时d2即 a月1日 距 1月1日的天数(不是1月时    要考虑该年是不是闰年)  
    
    //d1+d2 即 y1年a月1日距1850年1月1日的天数
    for(int y=y1;y<=y2;y++)
    {
        int day;
        if(IsRun(y) && a>2 && y==y1)    d2+=1;
        day = (d1+d2+1)%7;                //暂不明白为什么要+1 
        int time = 0,i;    
        //day 表示y年a月1日是星期几,0即星期一 
        if(IsRun(y) && a==2)
        {
            for(i=1;i<=29;i++)
            {
                if(i!=1)        day = (day+1)%7;
                if(day+1 == c)     time++;    //今天是星期c 
                if(time == b)    break;
            }
        }
        else
        {
            for(i=1;i<=m[a-1];i++)
            {
                if(i!=1)        day = (day+1)%7;
                if(day+1 == c)     time++;    //今天是星期c 
                if(time == b)    break;
            }
        }
        
        if(time == b)    //找到了
            printf("%4d/%02d/%02d\n",y,a,i);
        else
             cout<<"none"<<endl;
        if(a>2)         //看下一年是不是闰年 
        {
            if(IsRun(y+1))    d1+=366;
            else            d1+=365; 
        }
        else        //看今年是不是闰年 
        {
            if(IsRun(y))    d1+=366;
            else            d1+=365; 
        } 
    } 
    return 0;
}

 

posted @ 2019-03-12 13:04  萌新上路  阅读(144)  评论(0编辑  收藏  举报