在这个问题上,我们得到一个整数n。我们的任务是创建一个程序来查找序列1 +(1 + 3)+(1 + 3 + 5)+(1 + 3 + 5 + 7)+ +(1 + 3 + 5 + 7 + .... +(2n-1))。
从这个系列中,我们可以看到系列的第i个项是第一个i奇数之和。
输入项
n = 3
输出结果
14
说明-(1)+(1 + 3)+(1 + 3 + 5)= 14
解决此问题的简单方法是使用嵌套循环,然后将所有奇数加到sum变量中。然后返回总和。
该程序说明了我们解决方案的工作原理,
#include <iostream> using namespace std; int calcSeriesSum(int n) { int sum = 0, element = 1; for (int i = 1; i <= n; i++) { element = 1; for (int j = 1; j <= i; j++) { sum += element; element += 2; } } return sum; } int main() { int n = 12; cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2"<<n<<"-1)) is "<<calcSeriesSum(n); return 0; }
输出结果
Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*12-1)) is 650
这种方法无效,因为它使用了两个嵌套循环。
一种更有效的方法是在数学上找到通用公式以找到级数的总和。
n个奇数之和,
=(1)+(1 + 3)+(1 + 3 + 5)+…。(1 + 3 + 5 + ... + 2n-1)
= n2
首先,让我们看一下前n个奇数的总和,它代表该系列的各个元素。
系列总和,
sum = (1) + (1+3) + (1+3+5) + … + (1+3+5+ … + 2n-1) sum = ∑ (1+3+5+ … + 2n-1) sum = ∑ n2 sum = [n * (n+1) * (2*n -1)]/6
该程序说明了我们解决方案的工作原理,
#include <iostream> using namespace std; int calcSeriesSum(int n) { return ( n*(n + 1)*(2*n + 1) )/6; } int main() { int n = 9; cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*"<<n<<"-1)) is "<<calcSeriesSum(n); return 0; }
输出结果
Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*9-1)) is 285