ในปัญหานี้ เราได้รับตัวเลข 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