ในปัญหานี้เราได้รับตัวเลขสามตัว a, d และ n งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมของอนุกรมฮาร์มอนิกใน C++
ความก้าวหน้าของฮาร์มอนิก เป็นอนุกรมที่ผกผันจะเป็นความก้าวหน้าทางคณิตศาสตร์ เช่น. ถ้าสำหรับความก้าวหน้าฮาร์มอนิก A1, A2, A3.. มีความก้าวหน้าทางคณิตศาสตร์ 1/A1, 1/A2, 1/A3.
ดังนั้น HP ทั่วไปคือ
1/a, 1/(a+d), 1/(a+2d), … 1/(a + nd)
โดยที่ 1/a คือเทอมแรก และ d คือผลต่างทั่วไปของ reversedAP
คำอธิบายปัญหา − ในที่นี้ เราจะได้รับเทอมแรก a ผลต่างร่วม d และจำนวนเทอม n ของ HP และเราต้องหาผลรวมของมัน
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
a = 3, d = 2, n = 5
ผลลัพธ์
0.878211
คำอธิบาย
HP คือ ⅓, ⅕, 1/7, 1/9, 1/11.
Sum = ⅓ + ⅕ + 1/7 + 1/9 + 1/11 = 0.878211
แนวทางการแก้ปัญหา
เราจะวนซ้ำเทอมที่ n นี้และหาค่าของแต่ละเทอมของ HP และเพิ่มเข้าไปใน sumVar และคืนค่า sumVal ในตอนท้าย
อัลกอริทึม
เริ่มต้น − sumVal =0, เทอม =0;
- ขั้นตอนที่ 1 − ลูปสำหรับ i -> 1 ถึง n
- ขั้นตอนที่ 1.1 หาพจน์ พจน์ =1/( a + (i-1)*(d)
- ขั้นตอนที่ 1.2 − อัปเดต sumVal, sumVal +=เทอม
- ขั้นตอนที่ 2 − พิมพ์ sumVal
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> using namespace std; float findSeriesSum(int a, int d, int n){ float sumVal = 0; float term = 0; for(float i = 1; i <= n; i++){ term = (1.0)/(float)(a + (i-1)*d); sumVal += term; } return sumVal; } int main(){ int n = 5, a = 3, d = 2; cout<<"The sum of HP is "<<findSeriesSum(a, d, n); return 0; }
ผลลัพธ์
The sum of HP is 0.878211
อีกหนึ่งแนวทาง อาจใช้ฟังก์ชันเรียกซ้ำเพื่อหาผลรวม
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> using namespace std; float findSeriesSum(int a, int d, int n){ if(n == 1){ return (float)(1.0)/a; } float term = (1.0)/ (float)(a + (n-1)*d); return term + findSeriesSum(a, d, n-1); } int main(){ int n = 5, a = 3, d = 2; cout<<"The sum of HP is "<<findSeriesSum(a, d, n); return 0; }
ผลลัพธ์
The sum of HP is 0.878211