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