分析
由于我们只用枚举200年的时间,所以可以用for循环直接模拟。
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int a,b,c,y_1,y_2,ind=2; //ind为1850年1月1日的星期二
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void check(int x) //判断是否为闰年
{
if((x%4==0 && x%100) || (x%400==0)) mon[2]=29; //如果是闰年,就将2月设置为29天
else mon[2]=28;
}
int main()
{
cin>>a>>b>>c>>y_1>>y_2;
for(int y=1850;y<=y_2;y++)
{
check(y); //先判断是否为闰年,修改二月天数
int f=0;
for(int m=1;m<=12;m++)
{
int cnt=0; //记录本月第cnt个星期c
for(int d=1;d<=mon[m];d++)
{
if(ind==c) cnt++; //如果今天是星期c,就cnt++
if(m==a && b==cnt && ind==c && y_1<=y) //如果在今年,同时为a月第b个星期c,就输出
{
printf("%d/%02d/%02d\n",y,m,d);
f=1;
}
ind++;
if(ind==8) ind=1; //当为星期8时,要重新赋值为1
}
}
if(!f && y_1<=y) puts("none"); //今年没有这个日子,输出none
}
return 0;
}