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

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

โจทย์

ได้รับตัวเลข 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