题解:洛谷 P5722 数列求和
【题目来源】
【题目描述】
计算 \(1+2+3+\times+(n-1)+n\) 的值,其中正整数 \(n\) 不大于 \(100\)。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。
【输入】
输入一个正整数 \(n\)。
【输出】
输出一个正整数,表示最后求和的答案。
【输入样例】
100
【输出样例】
5050
【核心思想】
-
问题分析:给定正整数 \(n \le 100\),计算 \(1+2+3+\cdots+n\) 的值。题目明确要求不能使用等差数列求和公式,必须用循环逐项累加。
-
算法选择:
- 循环累加:从 \(1\) 到 \(n\) 遍历,将每个数加到累加器
sum中
- 循环累加:从 \(1\) 到 \(n\) 遍历,将每个数加到累加器
-
关键步骤:
- 读入数据:
cin >> n - 初始化:
sum = 0 - 循环累加(\(i\) 从 \(1\) 到 \(n\)):
sum += i:将当前数加入总和
- 输出结果:
sum
- 读入数据:
-
时间/空间复杂度:
- 时间复杂度:\(O(n)\),需要遍历 \(n\) 个数
- 空间复杂度:\(O(1)\),仅需常数个变量
-
循环累加的核心思想:
- 逐项累积:通过循环将每个数逐一加入累加器,模拟手工加法过程
- 初始化重要性:
sum必须初始化为 \(0\),否则初始值不确定导致错误 - 范围覆盖:循环从 \(1\) 到 \(n\)(含),确保所有数都被加入
- 适用于基础累加、循环结构、求和模拟类入门问题
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
int n; // 定义变量:求和上限n
int sum = 0; // 定义变量:累加和,初始化为0
cin >> n; // 输入求和上限n
// 循环累加1到n的所有整数
for (int i = 1; i <= n; i++)
{
sum += i; // 将当前数i加到总和sum中
}
cout << sum; // 输出最终累加结果
return 0; // 程序正常结束
}
【运行结果】
100
5050
浙公网安备 33010602011771号