题目描述
有一数列如下: 1 2 4 7 11 16 22… 试求该数列前 N 项之和。
输入
一个整数 N ( 0<N<1000 )。
输出
一个整数。
样例
输入
6
输出
41
代码1
#include <iostream>
int main() {
int N;
std::cin >> N;
int sum = 0;
int increment = 1;
int current = 1;
for (int i = 1; i <= N; ++i) {
sum += current;
current += increment;
increment++;
}
std::cout << sum << std::endl;
return 0;
}
这段代码根据给定的 N 值,使用循环来计算数列前 N 项的和。在每次循环中,将当前项的值累加到 sum 中,并更新当前项和递增的数列值。循环执行 N 次后,得到数列前 N 项的和,将其输出。
代码2
当我们观察序列 1, 2, 4, 7, 11, 16, ... 时,我们可以发现每一项都是前一项加上一个递增的数列,递增的数列从 1 开始,每次递增 1。所以我们可以利用数学公式来计算数列前 N 项的和。
数列的第 n 项可以表示为 (a_n = a_{n-1} + (n-1)),其中 (a_1 = 1)。我们可以将这个公式改写为 (a_n = a_1 + (1+2+3+...+(n-1)))。
式子 (1+2+3+...+(n-1)) 可以使用数学公式求和得到,即 (1+2+3+...+(n-1) = \frac{{(n-1) \cdot n}}{2})。将这个公式代入前面的公式,我们可以得到 (a_n = a_1 + \frac{{(n-1) \cdot n}}{2})。
因此,要计算数列前 N 项的和,我们只需要将 (n) 替换为 (N) 并计算即可。
#include <iostream>
int main() {
int N;
std::cin >> N;
int sum = 1 + (N - 1) * N / 2;
std::cout << sum << std::endl;
return 0;
}
这段代码首先读取输入的 N 值,然后使用数学公式计算数列前 N 项的和,并将结果输出。
这种方法更简洁,直接利用数学公式来计算,不需要使用循环进行累加,效率更高。
希望对您有所帮助!如果您还有其他问题,请随时提问。