#t7. 后天是星期几

后天是星期几

后天是星期几

题目描述

我们用数字 11 到 77 依次对应星期一到星期日。给定代表某一天的数字,请你计算并输出那天的“后天”对应的数字。

输入格式

输入第一行给出一个正整数 nn(1≤n≤71 \le n \le 7),代表星期里的某一天。

输出格式

在一行中输出该天的后天对应的星期数字。

样例输入 1

3

样例输出 1

5

样例输入 2

6

样例输出 2

1

数据范围

1≤n≤71 \le n \le 7

提示

一、问题在哪:取模的结果从 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,星期日

拆开看三步:

  1. w - 1:把 1~7 平移成 0~6,让 0 成为起点;
  2. + n 后 % 7:在 0~6 里绕圈,超过 6 就回到 0;
  3. + 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,说明少了某一步映射。