ภาพรวมปัญหา
หาผลรวมของอนุกรม 1/(1×2) + 1/(2×3) + 1/(3×4) + ... + 1/(n×(n+1))
ตัวอย่าง
Input: n = 3 Output: 0.75 Explanation: 1/2 + 1/6 + 1/12 = 6/12 + 2/12 + 1/12 = 9/12 = 3/4 = 0.75
วิธีแก้ปัญหา
วิธีลูปธรรมดา - O(n)
double sum = 0;
for (int i = 1; i <= n; i++)
sum += 1.0 / (i * (i+1));
วิธีสูตรคณิตศาสตร์ - O(1)
ใช้การแยกเศษส่วน: 1/(i(i+1)) = 1/i - 1/(i+1)
อนุกรมทีเลสโคป (Telescoping): 1 - 1/(n+1) = n/(n+1)
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
double calcSeriesSum(int n) {
return (double)n / (n + 1);
}
int main() {
int n = 5;
cout << "Sum = " << calcSeriesSum(n);
return 0;
}
ผลลัพธ์
Sum of the series 1/(1*2) + 1/(2*3) + 1/(3*4) + 1/(4*5) + ... is 0.833333