查找给定数字是否为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