ในปัญหานี้ เราได้รับตัวเลข งานของเราคือ ค้นหาว่าจำนวนที่กำหนดเป็นผลรวมของจำนวนธรรมชาติ 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