查找给定数字是否为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*总和=n2+n
=>n2+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