节日
#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; }