【GESP】C++一级练习 luogu-B2074, 计算星期几
GESP一级知识点循环和分支语句练习。又是跟星期有关的计算。题目逻辑不难,但是对数据范围的把握和处理其实有点难度,至少有个小弯子需要处理,不简单。
luogu-B2074
题目要求
题目描述
假设今天是星期日,那么过 $a$ 的 $b$ 次方天之后是星期几?
输入格式
两个正整数 $a, b$,中间用单个空格隔开。$1 \le a \le 100$,$1 \le b \le 10000$。
输出格式
一个字符串,代表过 $a$ 的 $b$ 次方天之后是星期几。
其中,
Monday
是星期一,Tuesday
是星期二,Wednesday
是星期三,Thursday
是星期四,Friday
是星期五,Saturday
是星期六,Sunday
是星期日。
样例输入 #1
1
3 2000
样例输出 #1
1
Tuesday
对于 $100 \%$ 的数据,$1 \le a \le 100$,$1 \le b \le 10000$。
题目分析
- 根据题目描述,这是一道计算星期几的问题。我们需要计算过a的b次方天之后是星期几。
- 使用一个循环来计算a的b次方,并将结果模7以确定星期几。
- 根据模7的结果,输出对应的星期几。
重点注意:
- 由于 $a$ 的 $b$ 次方可能非常大,直接对 $a$ 的 $b$ 次方进行取模运算可能会导致结果不准确,因为 $a$ 的 $b$ 次方可能非常大,导致无法存储最后结果
- 为了解决这个问题,我们可以使用取模运算的性质:$(a \cdot b) \% c = ((a \% c) \cdot (b \% c)) \% c$。
- 我们可以在计算 $a$ 的 $b$ 次方时,每次乘法后都对结果进行取模运算,以保证结果的准确性。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <cstdio>
#include <iostream>
using namespace std; // 使用标准命名空间
int main() {
int n; // 定义一个整数变量n,用于存储输入的整数
cin >> n; // 从输入流中读取n的值
int c; // 定义一个整数变量c,用于存储输入的幂次
cin >> c; // 从输入流中读取c的值
int mod = n % 7; // 计算n对7的余数,用于确定初始星期几
int ans = mod; // 初始化答案为mod的值
for (int i = 1; i < c; i++) { // 循环从1到c-1
ans %= 7; // 对ans进行取模运算,确保结果在0到6之间
ans *= mod; // 将ans乘以mod,模拟幂次的计算
}
// 根据ans的值输出对应的星期几
if (ans % 7 == 0) {
cout << "Sunday";
}
if (ans % 7 == 1) {
cout << "Monday";
}
if (ans % 7 == 2) {
cout << "Tuesday";
}
if (ans % 7 == 3) {
cout << "Wednesday";
}
if (ans % 7 == 4) {
cout << "Thursday";
}
if (ans % 7 == 5) {
cout << "Friday";
}
if (ans % 7 == 6) {
cout << "Saturday";
}
return 0; // 返回0,表示程序执行成功
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
本文由作者按照 CC BY 4.0 进行授权