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

ค้นหาผลบวกที่ m ของจำนวนธรรมชาติ n ตัวแรกใน C++


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

คำอธิบายปัญหา: เราจะหาผลรวมของจำนวนธรรมชาติ n ตัว m ครั้ง ผลรวมถูกกำหนดโดยสูตร

ถ้า (ม> 1),

ผลรวม(n, m) =ผลรวม( ผลรวม(n, (m-1)), 1 )

ถ้า (ม =1)

sum(n, m) =sum(n, 1) =ผลรวมของ n จำนวนธรรมชาติ

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: m =4, n =2

ผลลัพธ์: 231

คำอธิบาย:

ผลรวม(2, 4) =ผลรวม ( ผลรวม(2, 3), 1 )

=ผลรวม ( ผลรวม ( ผลรวม (2, 2), 1) , 1 )

=ผลรวม ( ผลรวม ( ผลรวม (ผลรวม (2, 1), 1) , 1 ), 1)

=ผลรวม ( ผลรวม ( ผลรวม (3, 1) , 1 ), 1)

=ผลรวม ( ผลรวม ( 6 , 1 ), 1)
=ผลรวม (21, 1)

=231

แนวทางการแก้ปัญหา -

วิธีแก้ปัญหาอย่างง่ายคือการใช้สองลูปที่ซ้อนกัน ตัวนอกจะเป็นค่า m และตัวในจะเป็น n ค่า เราจะอัปเดตค่าของ n และเราจะคำนวณผลรวมของ n จำนวนธรรมชาติ m ครั้ง

วิธีที่มีประสิทธิภาพมากขึ้นคือการเรียกผลรวมของจำนวนธรรมชาติ n จำนวน m คูณด้วยการอัปเดตค่าด้วยผลรวมก่อนหน้าในแต่ละครั้งที่มีการเรียกซ้ำ

อัลกอริทึม:

ขั้นตอนที่ 1: อัปเดตค่า sum ด้วย sum =sum(n, m-1)* (sum(n, m-1)+1) / 2 ถ้าผลรวมของ m มากกว่า 1

ขั้นตอนที่ 2: หากค่าของ m =1 ให้คืนค่า sum =n * (n+1) /2

ขั้นตอนที่ 3: ผลตอบแทนรวม

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;

int calcSumN(int n, int m) {
   
   if (m == 1)
      return (n * (n + 1) / 2);
   return (calcSumN(n, m-1) * (calcSumN(n, m-1) + 1) / 2);
}

int main() {
   
   int n = 4;
   int m = 6;
   cout<<m<<"-th summation of first "<<n<<" natural numbers is "<<calcSumN(n, m);
   return 0;
}

ผลลัพธ์

6-th summation of first 4 natural numbers is 125230148