入门 · 循环
1 到 N 求和
读入整数 N,输出 1 + 2 + … + N。经典的第一个 for 循环 — 里面还藏着一个以后再揭开的数学捷径。
一句话答案用 for 循环加一个累加器把 1 到 N 加起来;闭式 N(N+1)/2 一步就能算出同样的答案,而 N ≤ 10000 时和仍然在 int 范围内。
题目
输入: 一个整数 N(1 ≤ N ≤ 10,000)。
输出: 1 + 2 + … + N 的和。
样例:
| 输入 | 输出 |
|---|---|
5 | 15(1+2+3+4+5) |
你的解答
「运行我的输入」用的自定义输入
判题在浏览器本地运行。死循环会在 3 秒后被自动中断 —— 但还是确保每个循环都有出口。代码随打随存。
卡住了?提示
提示 1 — 累加器模式
需要一个从 0 开始、不断变大的变量:int sum = 0;,循环里 sum += i;。这个"累加器"模式占初学者题目的一半。
提示 2 — 循环边界
for (int i = 1; i <= n; i++) — 从 1 开始(0 加了也白加),到 <= n 结束(N 本身要算进去)。判题专测这种边界。
题解(先自己试试!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
cout << sum << endl;
return 0;
}
循环用 N 步解决。著名的捷径:n * (n + 1) / 2 一步出答案(高斯九岁就会了)。注意那里的除法是整除 — 为什么重要见整数除法(英文)。下一题:三个数的最大值。
深度解析
为什么这样做对
累加器(total += i)是存在感最强的循环形状。换一道题,真正要回答的只有一个问题:每一轮往右边加什么。
代价
循环是 O(n);用高斯公式 n(n+1)/2 是 O(1)。n = 10000 时,一个是一万次加法,一个是三次算术运算。
常见错法
n * (n + 1) / 2在 n 约 6.5 万时就溢出 int。先除以 2 再乘,或者直接上long long。- 循环从
i = 0起对求和无害,但对求积是致命的。每次都严格对齐题目给的范围。
下一步
把加改成乘:阶乘。
记住这两句
- 累加器四步:初始化、循环、折入、返回。
- n(n+1)/2 把 O(n) 变成 O(1)——闭式解永远赢循环。
🐞 这段是错的 —— 点开,亲手让它挂一次
i < n 把最后一项漏掉了
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int total = 0;
for (int i = 1; i < n; i++) total += i;
cout << total << endl;
return 0;
}