在C++中判斷給定數字是否為前n個自然數之和
在這個問題中,我們給定一個數字num。我們的任務是判斷給定數字是否為前n個自然數之和。
問題描述:我們需要檢查給定的數字是否為前n個自然數之和。
讓我們來看一個例子來理解這個問題:
輸入:num = 55
輸出:yes, 10
解釋
55 是前 10 個自然數的和,1+2+3+4+5+6+7+8+9+10。
解決方案:
解決這個問題的一個簡單方法是找到n個自然數的和,直到它等於或大於num。
如果和等於num,則返回n。
如果在任何n值下,和大於num,則返回-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<<"The value is a sum of first "<<n<<" natural numbers";
return 0;
}輸出 -
The value is a sum of first 10 natural numbers
這種方法很好,但是我們可以使用n個自然數和的數學公式更有效地解決這個問題。
前n個自然數的和由公式給出:
sum = n*(n+1)/ 2
我們已知sum,需要找到n的值,
所以我們需要建立一個二次方程來求n。
=> 2*Sum = 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<<"The value is a sum of first "<<n<<" natural numbers";
return 0;
}輸出
The value is a sum of first 10 natural numbers
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
JavaScript
PHP