2. 累计相加
【问题描述】
输入一个正整数n
,求形如:
1 + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4 +
…⋯(1 + 2 + 3 + 4 + 5 + …⋯n)
的累计相加。
【输入描述】
输入一个正整数n。约定
1 ≤ n ≤ 100
。
【输出描述】
输出累计相加的结果。
【样例输入 1】
3
【样例输出 1】
10
【样例输入 2】
4
【样例输出 2】
20
【样例输入 3】
10
【样例输出 3】
220
解析:最朴素的做法是两层循环,外循环计算总和,内循环计算1到i的和,详见代码:
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++) {
int sum1 = 0;
for(int j = 1; j <= i; j++) {
sum1 += j;
}
sum += sum1;
}
cout << sum << endl;
return 0;
}
我们还可以使用计算等差数列和的公式1到i的和为(i+)*i/2,将内层循环化简,详见代码:
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++)
sum += (i + 1) * i / 2;
cout << sum << endl;
return 0;
}
通过分析,我们发现每次求1到i的和都是在上次的基础上加i,可以简化内层循环,详见代码:
#include <iostream>
using namespace std;
int main() {
int n = 0;
cin >> n;
int sum = 0;
int sum1 = 0;
for (int i = 1; i <= n; i++) {
sum1+=i;
sum += sum1;
}
cout << sum << endl;
return 0;
}