在 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
广告