题目链接

明天星期几?

题目描述

我们用整数 1 到 7 分别表示星期一到星期日。已知今天是星期 d,请你推算明天是星期几。

输入描述: 输入一个整数 d (1 ≤ d ≤ 7),表示今天是星期几。

输出描述: 输出一个整数,表示明天是星期几。

解题思路

本题的核心是处理一个从1到7的循环周期。

方法一:使用条件判断 (if-else) 这是最直观的思路。

  • 如果今天不是星期日(即 d 小于 7),那么明天就是 d + 1
  • 如果今天恰好是星期日(即 d 等于 7),那么明天就要从周期末尾回到开头,也就是星期一(1)。

方法二:使用模运算(更简洁) 模运算(%)是处理循环问题的绝佳工具。我们可以找到一个通用的数学表达式来解决这个问题。

  • 观察发现,对于 1 到 6,d + 1 就是答案。对于 7,答案是 1。
  • 表达式 (d % 7) + 1 可以完美地解决这个问题:
    • d 是 1 到 6 时, d % 7 结果是 d 本身, 所以 (d % 7) + 1 就是 d + 1
    • d 是 7 时, 7 % 7 结果是 0, 所以 (7 % 7) + 1 就是 1
  • 这个单一的表达式覆盖了所有情况,让代码非常简洁。

代码

#include <iostream>

using namespace std;

int main() {
    int d;
    cin >> d;
    // 使用模运算处理循环
    cout << (d % 7) + 1 << endl;
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int d = sc.nextInt();
        // 使用模运算处理循环
        System.out.println((d % 7) + 1);
    }
}
d = int(input())
# 使用模运算处理循环
print((d % 7) + 1)

算法及复杂度

  • 算法:条件判断或模运算。
  • 时间复杂度: - 这是一个常数时间的计算。
  • 空间复杂度: - 仅需常数空间存储变量。