题解
与7无关的数之和
1 条题解
-
0
P4360 与7无关的数之和(【入门】)
解题思路
"与 7 相关"有两种情况:是 7 的倍数,或者个位是 7(比如 17、27、47)。题目要我们把 1 到 之间所有"与 7 无关"的数加起来。
判断一个数 是否与 7 相关:
- 是 7 的倍数:
i % 7 == 0; - 个位是 7:
i % 10 == 7(除以 10 的余数就是个位)。
两种情况只要满足一种就要跳过,用
continue跳过当前这个数,剩下的数累加到sum里。拿样例 来说,1 到 100 的总和是 5050,减去所有 7 的倍数(7、14、…、98)的和 735,再减去个位是 7 但又不是 7 的倍数的数(17、27、37、47、57、67、87、97)的和 436,得到 ,和样例一致。
边界情况: 既是 7 的倍数个位也是 7,只跳过一次就行; 同理。 最大 200,总和不会太大,用一个
int变量装绰绰有余。参考代码
// 求1~n中与7无关的数(不是7的倍数且个位不是7)之和 #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; for (int i = 1; i <= n; i++) { // 是7的倍数 或 个位是7,都算与7相关,跳过 if (i % 7 == 0 || i % 10 == 7) continue; sum += i; } cout << sum << endl; return 0; }复杂度分析
从 1 循环到 ,每个数只做两次取模判断, 最大 200,所以时间复杂度是 。只用一个整数变量装总和,额外空间复杂度是 。
- 是 7 的倍数:
- 1