对y总代码进行详细注释
#include<bits/stdc++.h>
using namespace std;
const int N = 210;
// 每月有多少天
int months[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
int is_leap(int year){
if( year % 400 == 0 || year % 4 == 0 && year % 100 )
return 1;
return 0;
}
// 求哪年的每月有多少天
int get_days_a_month(int year, int month){
if(month == 2) return months[month] + is_leap(year);
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){
// w表示该月1号是星期几,cnt 表示当前是第几个星期
int w = (1 + days) % 7, cnt = 0;
// 枚举该年的所有天,d表示日期
for(int d = 1; d <= get_days_a_month(year, month); d ++){
// 等于所求的星期几,这里下标从0开始,而不是1,所以c-1
if( w == c -1) {
cnt ++; // 当前第几个星期
if( cnt == b){ // 恰好是所要求的第b个星期,则输出
printf("%04d/%02d/%02d\n", year, month, d);
break;
}
}
w = (w + 1) % 7; // w不断增加,计算星期几
}
// 如果没有找到第b个星期,则输出none
if( cnt < b) puts("none");
}
// 记录某年的某月的1号距离1850年1月1日过了多少天
days += get_days_a_month(year, month);
// cout << days << endl;
}
}
}