题解
满足条件的数累加
1 条题解
-
0
解题思路
题目要求把 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