Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

주어진 숫자가 C++에서 처음 n개의 자연수의 합인지 확인

<시간/>

이 문제에서는 숫자가 주어집니다. 우리의 임무는 주어진 숫자가 처음 n개의 자연수의 합인지 찾는 것입니다.

문제 설명: 여기서 주어진 숫자가 처음 n개의 자연수의 합인지 확인해야 합니다.

문제를 이해하기 위해 예를 들어 보겠습니다.

입력: 숫자 =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<<"The value is a sum of first "<<n<<" natural numbers";
   return 0;
}

출력 -

The value is a sum of first 10 natural numbers

이 방법도 좋지만 n개의 자연수의 합에 대한 수학 공식을 사용하면 문제를 보다 효율적으로 해결할 수 있습니다.

첫 번째 상호 수의 합은 다음 공식으로 제공됩니다.

합계 =n*(n+1)/ 2

합계가 주어지고 n의 값을 찾아야 합니다.

따라서 n을 찾기 위해 이차 방정식을 만들어야 합니다.

=> 2*합계 =n 2 + n

=> n 2 + n - 2*sum =0 , 이차 방정식

이 2차 방정식의 해는 다음과 같습니다.

우리 솔루션의 작동을 설명하는 프로그램,

예시

#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