求C++中的級數1 + (1+3) + (1+3+5) + (1+3+5+7) + ...... + (1+3+5+7+...+(2n-1))和


我們已經給定了一個數字 n。我們的任務是編寫一個程式,求出級數 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)).  的和。

使用一個例子來幫助理解題目:

輸入:  n = 5

輸出: 55

根據題目,假設使用者給我們一個數字“n”,然後我們求級數 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) 的和。

首先,我們需要弄清楚這個級數的含義。

當 n = 1 時,級數變為 1。

當 n = 2 時,級數變為了 1 + (1+3),因為最後一個項 2n-1 可以計算為 2 乘以 2,然後減去 1,即 3。

n 的值
2n-1
級數變為
1
1
1
2
3
1+ (1+3)
3
5
1+ (1+3) + (1+3+5)
4
7
1+ (1+3) + (1+3+5) + (1+3+5+7)

這個問題可以透過兩種不同的方法解決。一種是藉助數學方法,可以獲得總和的表示式,因此不需要任何迴圈。另一種方法則是在程式碼中應用兩個迴圈。

使用迴圈直接求解

可以看到,該級數 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) 的每個項本身就是一個級數。因此,我們將使用巢狀迴圈。外層迴圈計算第二個項。而內層迴圈則用於計算項本身。

例項

線上演示

#include<stdio.h>

int calcSum(int n){
   int sum = 0;
   for (int i = 1; i <= n; i++) {
      // the first value of the term is always 1
      int value = 1;
      for (int j = 1; j <= i; j++) {
         sum += value;
         // next term
         value += 2;
      }
   }
   return sum;
}

int main(){
   int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

輸出

The sum of the series upto 35 is 14910

程式的工作方式

  • 使用者輸入 n 的值。比如 2。
  • 宣告名為“sum”的變數,其初始值是 0。
  • 當 i=1,for 條件 i<=n 為真,因此,迴圈將起作用。
    • 變數“ft”的值是 1。
    • j 的第一個值是 1。條件為真,因為 j 的值等於 i 的值,也是 1。所以,j 迴圈起作用。
    • ft 的值將增加到 sum。因此,sum 變成 0+1 等於 1。
    • ft 的值已更改並增加了 2,因此其新值為 1+2 = 3。
    • j 的值增加 1,變成 2。
    • 但現在內部 for 迴圈的條件為假,因為現在 j>i。因此,j 迴圈已退出。
  • 現在 i 的值增加 1,變成 2,因此 i=2,條件 i<= n 為真,因此進入迴圈。
    • 變數“ft”的值再次定義為 1。
    • 當 j 的值為 1 時,迴圈將起作用,因為 j<i 或 1<2。
    • ft 的值將增加到 sum。sum 的值已經是 1。因此,sum 的新值為 1+1 = 2。
    • ft 的值已更改並增加了 2,因此 ft 的新值為 1+2 =3。
    • j 的值增加 1,變成 2。for 迴圈條件為真,因為 j 等於 i。
    • ft 的值將增加到 sum。sum 的值已經是 2。因此,sum 的新值為 2+3 = 5。
    • ft 的值已更改並增加了 2,因此 ft 的新值為 3+2 =5。
    • 迴圈存在
  • 現在 i 的值增加 1,變成 3,因此 i=3,條件 i<= n 為假,因此退出迴圈。
  • 在螢幕上列印 sum 的訊息和值。

數學解

透過找到該問題的數學解並編寫程式碼,將大大簡化我們的程式碼。

設該系列的一般項 Tn  

在進一步進行之前,我們應該知道 1+3+5+7+9…..(2n-1) 系列的總和是 n2, 系列

12+22+32+42….n2  的總和是 i  =

說明我們程式碼工作原理的程式

例項

線上演示

#include<stdio.h>

int calcSum(int n){
   // required sum
   return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ;
}

int main(){
int n = 35;
   printf("The sum of the series upto %d is %d ", n , calcSum(n));

}

輸出

The sum of the series upto 35 is 14910

上述程式碼的工作原理: 

例如,讓我們假設使用者輸入了 n 的值為 2,那麼 2n-1 的值是 3,系列變成 1+ (1+3)。

但讓我們透過程式碼理解並獲取總和。

  • 使用 2 的值呼叫函式 sum()。
  • 函式將  的值計算為 5,並將其返回給 main 函式。
  • 帶著答案的訊息將列印在螢幕上。

更新於: 2021 年 1 月 27 日

486 次瀏覽

開啟你的 職業生涯

完成課程即可獲得認證

開始
廣告
© . All rights reserved.