ในปัญหานี้ เราได้รับตัวเลข n ซึ่งกำหนดพจน์ที่ n ของอนุกรม 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2 +4+6+8+...+2n). งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมของซีรีส์
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล
n = 3
ผลผลิต
คำอธิบาย − ผลรวม =(2) + (2+4) + (2+4+6) =2 + 6 + 12 =20
วิธีแก้ปัญหาอย่างง่ายคือการใช้การวนซ้ำซ้อน วงในหาองค์ประกอบ ith ของชุดข้อมูลแล้วรวมองค์ประกอบทั้งหมดเข้ากับตัวแปรผลรวม
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
int sum = 0;
for (int i = 1; i<=n; i++) {
int even = 2;
for (int j = 1; j<=i; j++) {
sum += even;
even += 2;
}
}
return sum;
}
int main() {
int n = 5;
cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n);
return 0;
} ผลลัพธ์
Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70
นี่ไม่ใช่วิธีที่มีประสิทธิภาพที่สุดในการแก้ปัญหาเนื่องจากความซับซ้อนของเวลาของปัญหาอยู่ที่ลำดับ O(n 2 )
วิธีแก้ปัญหาที่มีประสิทธิผลคือการใช้สูตรทางคณิตศาสตร์สำหรับผลรวมของชุดข้อมูล
ซีรี่ย์คือ 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n)พี>
เทอมที่ n ของซีรีส์คือ
an =(2 + 4 + 6 + 8 + … + 2n) =(n*n) + n
an คือผลรวมของเลขคู่ไม่เกิน n
ผลรวมของซีรีส์คือ
sum = 2 + (2+4) + (2+4+6) + (2+4+6+8) + ... + (2+4+6+8+...+2n) sum = ∑ (n2 + n) sum = ∑ n2 + ∑ n sum = [ (n*(n+1)*(2n + 1))/6 ] + [ (n*(n+1))/2 ] sum = ½ (n*(n+1)) [(2n + 1)/3 + 1] sum = ½ (n*(n+1)) [(2n + 1 + 3)/3] sum = ½ (n*(n+1)) [2(n+2)/3] sum = ⅓ n*(n+1)(n+2)
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream>
using namespace std;
int calcSeriesSum(int n) {
return ((n)*(n+1)*(n+2)/3);
}
int main() {
int n = 5;
cout<<"Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+"<<(2*n)<<") is "<<calcSeriesSum(n);
return 0;
} ผลลัพธ์
Sum of the series 2 + (2+4) + (2+4+6) + ... + (2+4+6+...+10) is 70