1. 问题背景与需求解析
这道题目来自《算法笔记》的练习章节,属于基础编程训练中的循环结构应用题型。题目要求实现"连续自然数求和"的计算,看似简单却蕴含着算法设计中几个关键思维模式。
在实际编程教学中,这类题目通常有三个训练目标:
- 掌握循环结构的语法和逻辑控制
- 理解累加器的使用模式
- 培养边界条件处理意识
我注意到题目编号中的"例题5-1-2"暗示着这是配套教材第五章第一节的第二个示例,这类编号体系在算法教材中很常见,通常代表"章节-小节-题号"的结构。通过这个编号可以推断,前置知识应该包括:
- 基本输入输出
- 变量定义与运算
- for/while循环语法
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解决方案设计
2.1 基础实现方案
最直观的解法是使用循环结构累加自然数。以C语言为例,基础实现如下:
c复制#include <stdio.h>
int main() {
int n, sum = 0;
scanf("%d", &n);
for(int i=1; i<=n; i++) {
sum += i;
}
printf("%d", sum);
return 0;
}
这个版本包含了几个关键点:
- 使用
scanf获取用户输入的n值 - 初始化累加器sum为0
- for循环从1迭代到n
- 每次循环将当前i值累加到sum
- 最终输出结果
2.2 数学公式优化方案
其实这个问题可以用数学公式直接求解,避免循环:
c复制#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
printf("%d", n*(n+1)/2);
return 0;
}
这个方案基于等差数列求和公式:
[ S = \frac{n(a_1 + a_n)}{2} ]
对于连续自然数,a₁=1,aₙ=n,因此简化为n(n+1)/2。
2.3 方案对比分析
| 方案 | 时间复杂度 | 空间复杂度 | 适用场景 |
|---|---|---|---|
| 循环累加 | O(n) |
