在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

回到顶部