#include<iostream>
using namespace std;
int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int is_run(int year){
if(year%400==0||(year%4==0&&year%100)) return 1;
return 0;
}
int getdays(int year,int month){
if(month==2) return m[month]+is_run(year);
return m[month];
}
//星期一到星期日用0-6表示
int main(){
int a,b,c,y1,y2;
cin>>a>>b>>c>>y1>>y2;
//输出从公元y1年到公元y2年间的每年的a月的第b个星期c的日期。
//已知1850年1月1日是星期二
int days=0;//总共距离1850年1月1日表示过了多少天
for(int year=1850;year<=y2;year++){//在1个年内
for(int month=1;month<=12;month++){//在1个月内
if(year>=y1&&month==a){//这时候才用上y1
int w=(1+days)%7;//先算一下这个月的1月1号是星期几,1850年1月1日是星期二,下标为1
//星期2就是w=1
int cnt=0;//星期
for(int d=1;d<=getdays(year,month);d++){//枚举这个月
if(w==c-1) cnt++;//枚举到了星期c 看下一周
//cnt是从0开始 所以第一个检查第1个星期 先++再判断
if(cnt==b){//当周 而不是 下周
printf("%04d/%02d/%02d\n",year,month,d);
break;
}
//如果cnt不是b
w=(w+1)%7;//向后推一天星期几
}//这个月枚举结束
if(cnt<b){//枚举到的所有周 没到第b周
cout<<"none"<<endl;
}
}
days+=getdays(year,month);//要在判断y>=y1之外的 总天数不断累加
}
}
return 0;
}
标签:return,资格考试,题解,31,month,int,year,y1,CCF
From: https://blog.csdn.net/m0_73290253/article/details/142729826