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

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

#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

最后打印当前是周几
2 回复 0 转发 0 喜欢 7 阅读
回复 (2)
默认 最新
露米 5 天前
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