解题思路
日期类问题
+直接枚举每一天
+使用0,1,2,3,4,5,6分别表示星期一到星期日
日期类模板
//平年每个月的天数
int month[13]={
0,31,30,31,30,31,30,31,31,30,31,30,31;
};
int Is_leap(int year) //判断是否是闰年
{
if(year%4==0&&year%100||year%400==0)
return 1;
return 0;
}
//
int get_days(int year,int month)
{
if(month==2)
return months[2]+Is_leap(year);
else
return months[month];
}
AC代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//平年每个月的天数
int months[13]={
0,31,28,31,30,31,30,31,31,30,31,30,31
};
int Is_leap(int year) //判断是否是闰年
{
if(year%4==0&&year%100||year%400==0)
return 1;
return 0;
}
// 获取每个月的天数
int get_days(int year,int month)
{
if(month==2)
return months[2]+Is_leap(year);
else
return months[month];
}
int main()
{
int a,b,c,y1,y2;
cin>>a>>b>>c>>y1>>y2;
int days=0;
for(int year=1850;year<=y2;year++)
{
for(int month=1;month<=12;month++)
{
if(year>=y1&&month==a)
{
int w=(1+days)%7;
int cnt=0;
for(int day=1;day<=get_days(year,month);day++)
{
if(w==c-1)
{
cnt++;
if(cnt==b)
{
printf("%04d/%02d/%02d\n",year,month,day);
}
}
w=(w+1)%7;
}
if(cnt<b)
puts("none");
}
days+=get_days(year,month);
}
}
return 0;
}