Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหาว่าจำนวนที่กำหนดเป็นผลรวมของ n ตัวเลขธรรมชาติตัวแรกใน C++ . หรือไม่


ในปัญหานี้ เราได้รับตัวเลข งานของเราคือ ค้นหาว่าจำนวนที่กำหนดเป็นผลรวมของจำนวนธรรมชาติ 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<<"The value is a sum of first "<<n<<" natural numbers";
   return 0;
}

ผลลัพธ์ -

The value is a sum of first 10 natural numbers

วิธีนี้เป็นวิธีที่ดี แต่เราสามารถแก้ปัญหาได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้สูตรทางคณิตศาสตร์สำหรับผลรวมของจำนวนธรรมชาติ n ตัว

ผลรวมของจำนวนรวมตัวแรกถูกกำหนดโดยสูตร

sum =n*(n+1)/ 2

เราได้รับผลรวมและเราต้องหาค่าของ n

ดังนั้นเราต้องสร้างสมการกำลังสองเพื่อหา n

=> 2*Sum =n 2 + น

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

ผลลัพธ์

The value is a sum of first 10 natural numbers