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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP