#t7. 后天是星期几
后天是星期几
后天是星期几
题目描述
我们用数字 到 依次对应星期一到星期日。给定代表某一天的数字,请你计算并输出那天的“后天”对应的数字。
输入格式
输入第一行给出一个正整数 (),代表星期里的某一天。
输出格式
在一行中输出该天的后天对应的星期数字。
样例输入 1
3
样例输出 1
5
样例输入 2
6
样例输出 2
1
数据范围
提示
一、问题在哪:取模的结果从 0 开始,星期从 1 开始
n % 7 的结果只能是 0 ~ 6,而星期是 1 ~ 7。直接套用会整体错一位。
二、标准做法:先减 1,算完再加 1
int w = 5; // 星期五
int n = 3; // 往后 3 天
int ans = (w - 1 + n) % 7 + 1; // (4+3)%7+1 = 7,星期日
拆开看三步:
w - 1:把1~7平移成0~6,让 0 成为起点;+ n后% 7:在 0~6 里绕圈,超过 6 就回到 0;+ 1:再平移回1~7。
三、为什么必须先减 1
如果直接 (w + n) % 7,当 w + n 正好是 7 的倍数时结果是 1,但实际应该是 7。差的就是这个偏移。
四、验证三个边界
| w | n | 期望 | 公式结果 |
|---|---|---|---|
| 7 | 1 | 1(周一) | (6+1)%7+1 = 1 |
| 7 | 7(周日) | (6+7)%7+1 = 7 | |
| 1 | 6 | (0+6)%7+1 = 7 |
- 先想:直接对 n+2 取余,余数会不会出现 0?出现 0 时应该对应星期几?
- 用「减 1 → 加 2 → 对 7 取余 → 加 1」的顺序试一遍。
- 在纸上把 n=6、n=7 两个边界走一遍。
自查:用两个样例分别验证;如果输出 0 或 8,说明少了某一步映射。
相关
在以下作业中: