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

ผลรวมของอนุกรม 1 + (1+3) + (1+3+5) + (1+3+5+7) + + (1+3+5+7+....+(2n-1) ) ใน C++


ในปัญหานี้ เราได้รับจำนวนเต็ม n งานของเราคือสร้างโปรแกรมหาผลรวมของอนุกรม 1 + (1+3) + (1+3+5) + (1+3+5+7) + + (1+3+5+7+ ....+(2n-1)).

จากอนุกรมนี้ เราจะสังเกตได้ว่าเทอมของอนุกรมนั้นเป็นผลรวมของเลขคี่ตัวแรกของ i

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

ป้อนข้อมูล

n = 3

ผลผลิต

14

คำอธิบาย − (1) + (1+3) + (1+3+5) =14

วิธีแก้ปัญหาง่ายๆ สำหรับปัญหานี้คือการใช้การวนซ้ำซ้อนแล้วเพิ่มตัวเลขคี่ทั้งหมดลงในตัวแปรผลรวม แล้วคืนเงิน

ตัวอย่าง

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

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   int sum = 0, element = 1;
   for (int i = 1; i <= n; i++) {
      element = 1;
      for (int j = 1; j <= i; j++) {
         sum += element;
         element += 2;
      }
   }
   return sum;
}
int main() {
   int n = 12;
   cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2"<<n<<"-1)) is "<<calcSeriesSum(n);
   return 0;
}

ผลลัพธ์


Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*12-1)) is 650


วิธีนี้ใช้ไม่ได้ผลเนื่องจากใช้การวนซ้ำซ้อนสองลูป

วิธีที่มีประสิทธิภาพมากขึ้นคือการหาสูตรทั่วไปทางคณิตศาสตร์เพื่อหาผลรวมของชุดข้อมูล

ผลรวมของเลขคี่ n

=(1) + (1+3) + (1+3+5) + …. (1+3+5+... + 2n-1)

=n2

อันดับแรก มาดูผลรวมของเลขคี่ n ตัวแรก ซึ่งแทนองค์ประกอบแต่ละส่วนของอนุกรมนั้น

ผลรวมของซีรีส์

sum = (1) + (1+3) + (1+3+5) + … + (1+3+5+ … + 2n-1)
sum = ∑ (1+3+5+ … + 2n-1)
sum = ∑ n2
sum = [n * (n+1) * (2*n -1)]/6

ตัวอย่าง

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

#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
   return ( n*(n + 1)*(2*n + 1) )/6;
}
int main() {
   int n = 9;
   cout<<"Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*"<<n<<"-1)) is "<<calcSeriesSum(n);
return 0;
}

ผลลัพธ์

Sum of the series 1 + (1+3) + (1+3+5) + (1+3+5+7) + ... + (1+3+5+7+ ... + (2*9-1)) is 285