在C++中求1^2 - 2^2 + 3^2 - 4^2 ... 直到n项的和
在这个问题中,我们给定一个整数N。我们的任务是求1^2 - 2^2 + 3^2 - 4^2 ... 直到n项的和。
让我们来看一个例子来理解这个问题:
Input : N = 3 Output : 6
说明 -
12 - 22 + 32 = 1 - 4 + 9 = 6
解决方案方法
解决这个问题的一个简单方法是使用循环。我们将使用迭代器i从1循环到n。
如果i是奇数,则将(i2)添加到总和。
如果i是偶数,则从总和中减去(i2)。最后,在循环结束后返回级数的和。
算法
初始化 - sum = 0。
步骤1 - 循环到n,i -> 1到n
步骤1.1 - 如果i是奇数,则将(i2)添加到sum,如果(i % 2 == 0) => sum += i2
步骤1.2 - 如果i是偶数,则从sum中减去(i2),如果(i % 2 == 0) => sum -= i2
步骤2 - 返回sum。
示例
程序说明了我们解决方案的工作原理
#include <iostream> using namespace std; int findSumOfSeries(int n) { int sum = 0; for (int i = 1; i <= n; i++) { if (i % 2 == 0) sum -= (i*i); else sum += (i*i); } return sum; } int main(void) { int n = 5; cout<<"The sum of series is "<<findSumOfSeries(n); }
输出
The sum of series is 15
另一种方法是使用级数求和公式。
如果N是偶数,
$\mathrm{sum\:=\:1^2\:-\:2^2\:+\:3^2\:-\:4^2\:+\:\dotsm\:+\:(n-1)^2\:-n^2}$
$\mathrm{sum\:=\:(1-2)(1+2)\:+\:(3-4)(3+4)\:+\:\dotsm(n-1-n)(n-1+n)}$
$\mathrm{sum\:=\:(-1)(3)\:+\:(-1)(7)\:+\:(-1)(2n-1)}$
$\mathrm{sum\:=\:(-1)(1+2+3+4+\dotsm\:+(n-1)+n)}$
$\mathrm{sum\:=\:(-1)\:*\:\begin{bmatrix}\frac{n*(n+1)}{2} \end{bmatrix}}$
如果N是奇数,
$\mathrm{sum\:=\:1^2\:-\:2^2\:+\:3^2\:-\:4^2\:+\:\dotsm\:+\:(n-2)^2\:-(n-1)^2\:+\:n^2}$
$\mathrm{sum\:=\:(1^2\:-\:2^2\:+\:3^2\:-\:4^2\:+\:\dotsm\:+\:(n-2)^2\:-(n-1)^2)\:+\:n^2}$
$\mathrm{sum\:=\:\lbrace(-1)\:*[\frac{n*(n+1)}{2}]\rbrace\:+\:n^2}$
$\mathrm{sum\:=\:(\frac{-n^2\:+\:n\:+\:2n^2}{2})}$
$\mathrm{sum\:=\:(n+n^2)/2\:=\:n^*(n+1)/2}$
示例
程序说明了我们解决方案的工作原理
#include <iostream> using namespace std; int findSumOfSeries(int n) { int sum = 0; if(n % 2 == 0){ sum = (-1)*(n*(n+1))/2; } else { sum = (n*(n+1))/2; } return sum; } int main(void) { int n = 5; cout<<"The sum of series is "<<findSumOfSeries(n); }
输出
The sum of series is 15