在 C++ 中查詢前 n 個自然數的第 m 次求和
在這個問題中,我們得到了兩個整數 m 和 n。我們的任務是 *查詢前 n 個自然數的第 m 次求和*。
問題描述:我們將找到 n 個自然數的和 m 次。該和由以下公式給出:
如果 (m > 1),
sum(n, m) = sum( sum(n, (m-1)), 1 )
如果 (m = 1)
sum(n, m) = sum(n, 1) = n 個自然數的和
讓我們舉一個例子來理解這個問題,
輸入:m = 4, n = 2
輸出:231
解釋:
sum(2, 4) = sum ( sum(2, 3), 1 )
= sum ( sum ( sum (2, 2), 1) , 1 )
= sum ( sum ( sum (sum( 2, 1), 1) , 1 ), 1)
= sum ( sum ( sum (3, 1) , 1 ), 1)
= sum ( sum ( 6 , 1 ), 1)
= sum (21, 1)
= 231
解決方案方法 -
解決此問題的一個簡單方法是使用兩個巢狀迴圈。外部迴圈將用於 m 值,內部迴圈將用於 n 值。我們將更新 n 的值,並將計算 n 個自然數的和 m 次。
一種更有效的方法是遞迴地呼叫 n 個自然數的和 m 次,每次遞迴時都更新前一個和的值。
演算法:
步驟 1:如果 m 的和值大於 1,則使用 sum = sum(n, m-1)* (sum(n, m-1)+1) / 2 更新 sum 值。
步驟 2:如果 m 的值為 1,則返回 sum = n * (n+1) /2。
步驟 3:返回 sum。
程式說明我們解決方案的工作原理,
示例
#include <iostream>
using namespace std;
int calcSumN(int n, int m) {
if (m == 1)
return (n * (n + 1) / 2);
return (calcSumN(n, m-1) * (calcSumN(n, m-1) + 1) / 2);
}
int main() {
int n = 4;
int m = 6;
cout<<m<<"-th summation of first "<<n<<" natural numbers is "<<calcSumN(n, m);
return 0;
}輸出
6-th summation of first 4 natural numbers is 125230148
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP