查找给定数字是否为C ++中前n个自然数的总和

在这个问题上,我们给了一个数字num。我们的任务是查找给定数字是否为前n个自然数的总和。 

 

问题描述: 在这里,我们需要检查给定的数字是否为前n个自然数的总和。

让我们举个例子来了解这个问题,

输入:  num = 55

输出: 是,10

解释:

55是前10个自然数的总和,即1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10。

解决方法: 

解决问题的一种简单方法是找到n个自然数之和,直到等于或大于num。

如果总和等于num,则返回n。

如果n的任何值的总和变得大于n,则返回-1。

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>

using namespace std;

int isNatSum(int num){

   int sum = 0;

   for (int n = 1; sum < num; n++) {

      sum += n;

      if (sum == num)

         return n;

   }

   return -1;

}

int main(){

   int num = 55;

   int n = isNatSum(num);

   if(n == -1)

    cout<<"The value is not sum of natural numbers";

   else

      cout<<"该值是第一个值的总和 "<<n<<" natural numbers";

   return 0;

}

输出-

该值是第一个值的总和 10 natural numbers

 

这种方法很好,但是我们可以使用数学公式来计算n个自然数之和,从而更有效地解决问题。

第一个共同数字的总和由公式给出,

总和= n *(n + 1)/ 2 

给定总和,我们需要找到n的值,

因此,我们需要创建一个二次方程式来找到n。

=> 2 *总和= n 2 + n

=> n 2 + n-2 * sum = 0,二次方程

这个二次方程的解是

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>

#include <math.h>

using namespace std;

int isNatSum(int num){

   

   int n = ( -1+ sqrt (1 + (8*num) ))/2;

   if(ceil(n)==floor(n)){

      return n;

   }

   return -1;

}

int main(){

   

   int num = 55;

   int n = isNatSum(num);

   if(n == -1)

      cout<<"The value is not sum of natural numbers";

   else

      cout<<"该值是第一个值的总和 "<<n<<" natural numbers";

   return 0;

}

输出结果
该值是第一个值的总和 10 natural numbers

以上是 查找给定数字是否为C ++中前n个自然数的总和 的全部内容, 来源链接: utcz.com/z/329744.html

回到顶部