在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

更新於:2022年1月27日

736 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.