โจทย์
ได้รับตัวเลข num ทางเราต้อง ตรวจสอบว่า num เป็นผลรวมของ n จำนวนธรรมชาติแรกหรือไม่ (คือ num = n(n+1)/2)
ตัวอย่าง
Input: num = 55
Output: yes, 10 (เพราะ 1+2+...+10 = 55)
แนวทางแก้ปัญหา
วิธี 1: วนลูปสะสม บวก 1,2,3... จนกว่าจะ ≥ num
วิธี 2: สูตรกำลังสอง (เร็วกว่า) แก้สมการ n^2 + n - 2*num = 0
n = (-1 + sqrt(1 + 8*num)) / 2 ถ้า n เป็นจำนวนเต็ม -> ใช่
โปรแกรมตัวอย่าง (วิธี 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