返回题解分享
讨论 / 题解分享/ 帖子详情

星期计算(结果填空) - 题解

#include <iostream>

using namespace std;

int main()
{
	int res = 6, n = 1;

	for (int i = 0; i < 22; i++)
	{
		n *= 20;
		n %= 7;
	}
	cout << (res + n - 1) % 7 + 1;
	return 0;
}


res 存结果,当前为周六,n 存 20^22 的值

n乘22次20,每次模7

最后打印当前是周几
4 回复 0 转发 0 喜欢 9 阅读
回复 (4)
默认 最新
露米 2 天前
代码逻辑写得很清晰,这种通过循环取模来防止数据溢出的做法非常扎实。

特别是最后处理星期映射的那个小公式 (res + n - 1) % 7 + 1,处理得很巧妙,简洁地解决了余数 0 到 6 与星期 1 到 7 的对应问题,省去了不少条件判断。

在处理这类余数问题时,如果尝试观察一下底数 20 对 7 取模后的结果,会不会发现更简便的解法呢?🙂 比如把 20 看作 $21 - 1$,也就是余数为 -1,这样计算 22 次方或许就能直接口算出答案了。

这种解题后的记录和总结很有意义,能让思路变得更清晰。如果之后遇到指数特别大(比如 $20^{2024}$)的情况,也可以试着探索一下“快速幂”或者寻找余数周期规律的方法。

期待看到你更多有趣的解题分享呀。如果在尝试新方法时遇到了小卡点,随时可以一起交流。
0
露米 2026/3/27
代码写得很清晰,逻辑也特别扎实。

用循环取模的方法来处理幂运算是一个很棒的习惯,既直观又有效地避免了大数溢出的风险。最后处理星期映射的小公式 (res + n - 1) % 7 + 1 也很优雅,简洁地解决了余数与星期对应的问题。

这种记录和分享解题思路的过程很有意义。如果之后遇到指数更大的题目(比如 $20^{2024}$),或许可以尝试观察一下余数是否存在周期性的规律,或者看看“快速幂”的思路,可能会有新的发现。

慢慢积累,期待以后能看到你更多有趣的分享呀。🙂
如果在尝试过程中有了新的发现,或者遇到了什么小卡点,欢迎随时分享出来,我们一起交流呀。
0
露米 2026/3/11
n - 1) % 7 + 1。这个小公式很优雅地把 0-6 的余数映射回了 1-7 的星期表示,省去了写 if` 分支的麻烦,这种对细节的把控很到位。

如果尝试把指数 22 换成一个更大的数字(比如 2024),你觉得这种方法还会一样好用吗?或者会有什么新的发现?🙂"

Constraint Check:
- No "You are wrong": Checked.
- No
这种通过记录来梳理思路的习惯真的很棒。
如果在尝试过程中有了新的发现,或者遇到了什么小卡点,欢迎随时分享出来,我们一起交流呀。
0
露米 2026/2/8
代码写得很清晰呢。

用循环取模的方法处理 $20^{22}$ 确实很稳妥,有效避免了大数溢出的风险。最后的输出公式 (res + n - 1) % 7 + 1 处理得也很细节,把 1-7 的循环逻辑考虑得很周全。

如果尝试观察一下 20 对 7 取模后的余数规律,会不会发现更有趣的简便解法呢?🙂
比如 $20$ 除以 $7$ 余 $6$,如果把它看作是 $-1$,计算 $22$ 次方就会变得非常轻快。

这种记录和分享的过程很有意义,期待以后能看到你更多有趣的思路呀。
0