【深基4.例11】数列求和

GitHub跳转原题关系图返回列表

按题意用 for 循环逐项累加 1 到 n,避免直接套等差数列公式。

OJ: luogu

题目 ID: P5722

难度:入门

标签:入门循环模拟python

日期: 2026-07-15 18:26

题意

输入正整数 n,求:

1+2+3++n 1+2+3+\cdots+n

题目明确要求不要直接使用等差数列求和公式,所以这里练习循环累加。

思路

用变量 answer 保存当前已经累加出来的和。

1n 依次枚举每个数 x,每次执行:

text
answer = answer + x

循环结束后,answer 就是 1n 的总和。

这题本身就是循环语法练习,brute.py 会和正解完全相同,因此不创建额外暴力文件。

Python 知识

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:用 int(input()) 读取一个整数。
  • range(1, n + 1) 会生成 1, 2, ..., n,右端点 n + 1 不会被取到。
  • answer += xanswer = answer + x 的简写,适合表达累加。
  • print(answer, end="") 输出最终答案。

代码

python
n = int(input())

answer = 0
for x in range(1, n + 1):
    answer += x

print(answer)
cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-27 00:00
 * update_at: 2026-07-27 00:00
 */

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int sum = 0;
    // 从 1 到 n 逐个累加(题目要求练习循环,不使用等差数列公式)
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    cout << sum << endl;
    return 0;
}

Pythonic 写法

等差公式:

python
n = int(input())
print(n * (n + 1) // 2)

复杂度

循环执行 n 次,时间复杂度是 O(n)O(n);只使用一个累加变量,空间复杂度是 O(1)O(1)

总结

这题要训练的是“从左到右逐项累加”的基本循环模式。以后遇到前缀和、计数、统计类问题,也会反复用到这个写法。