1 条题解
-
0
【例82.1】不吉利日期
解题思路
把1月1日星期转换0~6,逐月维护该月1日星期。该月13日比1日晚12天,星期为(start+12)%7,若是周五输出月份,再按该月天数推进下月。
正确性说明
依照上述推导,逐步维护已处理部分的有效状态。每一步都完成当前项的贡献且不改变已确定的次序,结束时输出的状态恰好对应题目要求。
易错点
本年保证非闰,二月固定28天。
复杂度
固定12月,时间O(1),空间O(1)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int w; cin >> w; int start = w - 1; int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; for (int m = 1; m <= 12; m++) { if ((start + 12) % 7 == 4) cout << m << "\n"; start = (start + days[m - 1]) % 7; } return 0; }
- 1