top1编程
← 返回题目
题解

满足条件的数累加

1 条题解

  • 0
    @ 2026-8-4 21:06:23

    解题思路

    题目要求把 m 到 n 之间(包含 m 和 n)所有能被 17 整除的数加起来。

    怎么判断一个数能不能被 17 整除?用取余运算"%":如果一个数 i 满足 i%17==0,说明 i 除以 17 没有余数,i 就能被 17 整除。比如 51÷17=3 余 0,所以 51 能被 17 整除;而 52÷17=3 余 1,就不能。

    做法:用 for 循环让 i 从 m 走到 n(i=m; i<=n; i++),每走到一个数就判断 i%17 是不是 0,是就把 i 累加到 sum 里。循环结束后输出 sum。

    验证样例:50 到 85 之间能被 17 整除的数是 51、68、85,相加是 51+68+85=204,和样例输出一致。

    数据范围:m<n<1000,最多检查不到 1000 个数,和也不会超过 int 的范围。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int m, n;           // m、n:累加区间的两个端点
        cin >> m >> n;      // 读入 m 和 n
        int sum = 0;        // sum:累加的结果
        for (int i = m; i <= n; i++) {   // 从 m 一直检查到 n
            if (i % 17 == 0) {   // 如果 i 能被 17 整除(余数为 0)
                sum = sum + i;   // 把 i 累加进 sum
            }
        }
        cout << sum << endl; // 输出累加结果
        return 0;
    }
    

    复杂度分析

    循环从 m 走到 n,共执行 n-m+1 次,每次做一次取余和一次判断,时间复杂度是 O(n-m+1),简写为 O(n)。因为 n<1000,循环次数很少。空间上只用 m、n、sum、i 几个变量,空间复杂度 O(1)。

    • 1