Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm xem số đã cho có phải là tổng của n số tự nhiên đầu tiên trong C ++ hay không

Trong bài toán này, chúng ta được cung cấp một số num. Nhiệm vụ của chúng ta là tìm xem số đã cho có phải là tổng của n số tự nhiên đầu tiên hay không.

Mô tả sự cố: Ở đây, chúng ta cần kiểm tra xem số đã cho có phải là tổng của n số tự nhiên đầu tiên hay không.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào: num =55

Đầu ra: vâng, 10

Giải thích:

55 là tổng của 10 số tự nhiên đầu tiên, 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10.

Phương pháp tiếp cận giải pháp:

Một cách đơn giản để giải quyết vấn đề là tìm tổng của n số tự nhiên cho đến khi nó bằng hoặc lớn hơn num.

Nếu tổng bằng num, trả về n.

Nếu tại bất kỳ giá trị nào của n thì tổng lớn hơn n, trả về -1.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra -

The value is a sum of first 10 natural numbers

Phương pháp này hay nhưng chúng ta có thể giải bài toán hiệu quả hơn bằng cách sử dụng công thức toán học cho tổng của n số tự nhiên.

Tổng các số tương hỗ đầu tiên được đưa ra bởi công thức,

sum =n * (n + 1) / 2

Chúng ta đã cho tổng và chúng ta cần tìm giá trị của n,

Vì vậy, chúng ta cần tạo một phương trình bậc hai để tìm n.

=> 2 * Sum =n 2 + n

=> n 2 + n - 2 * sum =0, phương trình bậc hai

Nghiệm của phương trình bậc hai này là,

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#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;
}

Đầu ra

The value is a sum of first 10 natural numbers