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)) 的和。
從這個級數中,我們可以觀察到級數的第 i 項是前 i 個奇數的和。
讓我們舉個例子來理解這個問題:
輸入
n = 3
輸出
14
解釋 −(1) + (1+3) + (1+3+5) = 14
解決這個問題的一個簡單方法是使用巢狀迴圈,然後將所有奇數加到一個 sum 變數中。然後返回 sum。
示例
程式說明了解決方案的工作原理:
#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
int sum = 0, element = 1;
for (int i = 1; i <= n; i++) {
element = 1;
for (int j = 1; j <= i; j++) {
sum += element;
element += 2;
}
}
return sum;
}
int main() {
int n = 12;
cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2"<<n<<"-1)) is "<<calcSeriesSum(n);
return 0;
}輸出
Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*12-1)) is 650
這種方法效率不高,因為它使用了兩個巢狀迴圈。
一種更高效的方法是從數學上找到求級數和的通用公式。
n 個奇數的和:
= (1) + (1+3) + (1+3+5) + … (1+3+5+... + 2n-1)
= n²
首先,讓我們看看前 n 個奇數的和,它代表級數的各個元素。
級數的和:
sum = (1) + (1+3) + (1+3+5) + … + (1+3+5+ … + 2n-1) sum = ∑ (1+3+5+ … + 2n-1) sum = ∑ n2 sum = [n * (n+1) * (2*n -1)]/6
示例
程式說明了解決方案的工作原理:
#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
return ( n*(n + 1)*(2*n + 1) )/6;
}
int main() {
int n = 9;
cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*"<<n<<"-1)) is "<<calcSeriesSum(n);
return 0;
}輸出
Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*9-1)) is 285
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP