在C ++中找到前n个自然数的第m个求和
在这个问题上,我们给了两个整数m和n。我们的任务是找到前n个自然数的第m个求和。
问题描述: 我们将找到m次n个自然数之和。总和由公式给出,
如果(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(2,2),1),1)
=和(sum(sum(sum(sum(2,1),1),1),1)
=总和(sum(sum(3,1),1),1)
=总和(sum(6,1),1)
=总和(21,1)
= 231
解决方法-
解决此问题的简单方法是使用两个嵌套循环。外部一个用于m个值,内部一个用于n个值。我们将更新n的值,并计算n次自然数的总和m次。
一种更有效的方法是递归调用n个自然数的总和m次,每次进行递归时,用先前的总和更新值。
算法:
步骤1: 如果m的总和大于1,则用sum = sum(n,m-1)*(sum(n,m-1)+1)/ 2更新 总和。
步骤2: 如果m的值为1,则返回和= n *(n + 1)/ 2。
步骤3: 返回总和。
该程序说明了我们解决方案的工作原理,
示例
#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<<" 自然数是 "<<calcSumN(n, m);
return 0;
}
6-th summation of first 4 自然数是 125230148
以上是 在C ++中找到前n个自然数的第m个求和 的全部内容, 来源链接: utcz.com/z/357255.html