在这个问题中,我们得到一个数字n,它定义系列2 +(2 + 4)+(2 + 4 + 6)+(2 + 4 + 6 + 8)+ ... +(2 + 4 + 6 + 8 + ... + 2n)。我们的任务是创建一个程序来查找序列的总和。
输入项
n = 3
输出结果
解释- 总和=(2)+(2 + 4)+(2 + 4 + 6)= 2 + 6 + 12 = 20
解决此问题的简单方法是使用嵌套循环。内部循环找到序列的第i个元素,然后将所有元素加到sum变量中。
该程序说明了我们解决方案的工作原理,
#include <iostream> using namespace std; int calcSeriesSum(int n) { int sum = 0; for (int i = 1; i<=n; i++) { int even = 2; for (int j = 1; j<=i; j++) { sum += even; even += 2; } } return sum; } int main() { int n = 5; cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n); return 0; }
输出结果
Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70
这不是解决问题的最有效方法,因为问题的时间复杂度约为O(n 2)。
解决这个问题的有效方法是对序列之和使用数学公式。
该系列为2 +(2 + 4)+(2 + 4 + 6)+(2 + 4 + 6 + 8)+ ... +(2 + 4 + 6 + 8 + ... + 2n)
该系列的第n个术语是
一个Ñ =(2 + 4 + 6 + 8 + ... + 2n个)=(N * N)+ N
a n是最多n的偶数之和。
该系列的总和是
sum = 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n) sum = ∑ (n2 + n) sum = ∑ n2 + ∑ n sum = [ (n*(n+1)*(2n + 1))/6 ] + [ (n*(n+1))/2 ] sum = ½ (n*(n+1)) [(2n + 1)/3 + 1] sum = ½ (n*(n+1)) [(2n + 1 + 3)/3] sum = ½ (n*(n+1)) [2(n+2)/3] sum = ⅓ n*(n+1)(n+2)
该程序说明了我们解决方案的工作原理,
#include <iostream> using namespace std; int calcSeriesSum(int n) { return ((n)*(n+1)*(n+2)/3); } int main() { int n = 5; cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n); return 0; }
输出结果
Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70