题目链接
题目描述
我们用整数 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)
算法及复杂度
- 算法:条件判断或模运算。
- 时间复杂度:
- 这是一个常数时间的计算。
- 空间复杂度:
- 仅需常数空间存储变量。