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