C++程式:求給定序列的和


本文給定兩個數字 n 和 k,表示一個序列。我們的任務是建立一個 C++ 程式,找出下面給定序列的和。

輸入迴圈是將給定序列中的所有數字加起來以獲得單個輸出的過程。遞迴過程在數學中經常使用,並且可以使用序列來實現,例如算術序列(每個項都是透過在先前項之間新增一個常數差得到的)和幾何序列(其中每個項都乘以前一項的常數比率)。

序列為:

(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+
2)*... *(n-k+k).

以下是根據給定的 k 值找到給定序列直到第 n 項的和的**輸入和輸出場景**。

輸入

n = 4, k = 3

輸出

30

解釋

(1*2*3*....*k) + (2*3*....k*(k+1))
Series: (1*2*3) + (2*3*4) = 30

解決方案方法

一個簡單的解決方案是使用迭代找到總和。我們將使用兩個迴圈,一個用於每個項,第二個用於查詢項的值。然後將每個項的值加起來以獲得結果。

這個問題有兩種方法:

  • 使用巢狀迴圈
  • 使用單迴圈

使用巢狀迴圈

示例

以下是使用 C++ 中的巢狀迴圈查詢給定序列和的程式:

#include <iostream>
using namespace std;
int findSeriesSum(int n, int k){
   int sumVal = 0, term = 1;
   for(int i = 1; i <= (n-k + 1); i++){
      term = 1;
      for(int j = i; j< (k+i); j++){
         term *= j;
      }
      sumVal += term;
   }
   return sumVal;
}
int main(){
   int n = 4;
   int k = 3;
   cout<<"Sum of the series is: "<<findSeriesSum(n, k);
   return 0;
}

輸出

Sum of the series is: 30

使用單迴圈

讓我們看看給定問題的另一個解決方案。我們將嘗試一種更有效的方法,避免巢狀迴圈並提高時間複雜度。

示例

下面是使用 C++ 編寫的程式,該程式使用單個(無巢狀)迴圈查詢給定序列的和:

#include <iostream>
using namespace std;
int findSeriesSum(int n, int k){
   int sumVal = 1;
   for(int i = n+1; i > n-k; i--)
   sumVal *= i;
   sumVal /= (k + 1);
   return sumVal;
}
int main(){
   int n = 4;
   int k = 3;
   cout<<"Sum of the series is: "<<findSeriesSum(n, k);
   return 0;
}

輸出

Sum of the series is: 30

更新於: 2024年5月22日

685 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.