C++程式:求解級數1 + 2 + 2 + 3 + 3 + 3 + .. + n的和


本文給定一個數字n,表示該級數的第n項。我們的任務是編寫一個C++程式來求解級數1 + 2 + 2 + 3 + 3 + 3 + .... + n的和。

這個級數與其他級數不同,因為它包含根據其值重複的項。級數1 + 2 + 2 + 3 + 3 + 3 + … + n由重複的項組成,這些項僅根據其值無限重複。例如,1出現一次,2出現兩次,3出現三次,以此類推,直到第n個數字出現n次。

為了計算級數的和,您可以首先識別序列中的整體模式,然後定義模式重複的數字。這樣您就可以建立該級數。

以下是我們將求解級數和的輸入/輸出場景,其中第n項是數字n的平方和。這意味著它是一個平方數級數。

輸入

n = 5

輸出

55

解釋

前4項的和 = 12 + 22 + 32 + 42 = 1 + 2+2 + 3+3+3 + 4+4+4+4 = 30

解決方案方法

讓我們討論這個問題的所有可能的解決方案:

有三種方法可以求解級數1 + 2 + 2 + 3 + 3 + 3 + .. + n的和。

  • 使用巢狀迴圈
  • 使用乘法
  • 使用數學公式

使用巢狀迴圈

解決這個問題的最簡單方法是直接將級數中的數字加到n。這種方法需要巢狀迴圈,一個用於項,另一個用於每一項中的值。

這種方法很簡單,但效率不高,因為它有兩個巢狀迴圈,使得其時間複雜度為O(n2)

演算法

  • 步驟1 − 迴圈 i -> 1 到 n。
  • 步驟2 − 在此迴圈內,迴圈 j -> 1 到 i。
  • 步驟3 − 然後,更新 sumVar,sumVar+=i;
  • 步驟4 − 列印 sumVar。

示例

以下是使用C++中巢狀迴圈求解級數1 + 2 + 2 + 3 + 3 + 3 + .. + n的和的程式:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   for(int i = 1; i <= n; i++){
      for(int j = 1; j <= i; j++){
         sumVar += i;
      }
   }
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

輸出

The sum of series till 7 is 140

使用乘法

有效的解決方案基於這樣一個事實:如果一個數字(n)自身加n次,那麼結果可以透過將該數字自乘來獲得。

該解決方案更好,因為它只需要一個迴圈,時間複雜度為O(n)。但它並不是最佳解決方案,因為同樣的問題可以用O(1)的時間複雜度來解決。

即 5+5+5+5+5 = 5*5。

因此,我們可以使用乘法而不是一個迴圈來解決這個問題。

演算法

  • 步驟1 − 初始化 sumVal = 0;
  • 步驟2 − 迴圈 i -> 0 到 n。
  • 步驟3 − 更新 sumVal,sumVal += (i*i)

示例

以下是使用C++中乘法求解級數1 + 2 + 2 + 3 + 3 + 3 + .. + n的和的程式:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   for(int i = 1; i <= n; i++){
      sumVar += (i*i);
   }
   return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

輸出

The sum of series till 7 is 140

使用數學公式

有效的解決方案是使用給定級數和的通用公式。

級數和 = 1 + 2 + 2 + 3 + 3 + 3 + …. N。

這可以寫成

1 + (2+2) + (3+3+3) + … + (N+N+N..N)
1*1 + 2*2 + 3*3 + … N*N.
12 + 22 + 32 + … N2.

平方和的公式是n*(n+1)*(2n+1)/6,我們也可以用這個公式求和。

示例

以下是使用C++中數學公式說明我們解決方案工作原理的程式:

#include <iostream>
using namespace std;
int calcSeriesSum(int n){
   int sumVar = 0;
   sumVar = ((n*(n + 1)*( 2 * n + 1))/6 );
      return sumVar;
}
int main(){
   int n = 7;
   cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n);
   return 0;
}

輸出

The sum of series till 7 is 140

更新於:2024年5月22日

614 次瀏覽

開啟您的職業生涯

完成課程獲得認證

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