Trong bài toán này, chúng ta được cung cấp hai số n và k cho một chuỗi. Nhiệm vụ của chúng ta là tạo một chương trình để tìm tổng của chuỗi đã cho trong C ++.
Trình tự là -
(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+ 2)*... *(n-k+k).
Mô tả sự cố - Ở đây, chúng ta sẽ tìm tổng của chuỗi đã cho cho đến số hạng thứ n dựa trên giá trị đã cho của k.
Hãy lấy một ví dụ để hiểu vấn đề
Đầu vào
n = 4, k = 3
Đầu ra
30
Giải thích
Series: (1*2*3) + (2*3*4) = 30
Phương pháp tiếp cận giải pháp
Một giải pháp đơn giản là tìm tổng bằng phép lặp. Chúng ta sẽ sử dụng hai vòng lặp, một cho mỗi số hạng và vòng lặp thứ hai để tìm giá trị của số hạng. Sau đó, cộng giá trị của mỗi số hạng để nhận được kết quả.
Chương trình minh họa hoạt động của giải pháp của chúng tôi
Ví dụ
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 0, term = 1; for(int i = 1; i <= (n-k + 1); i++){ term = 1; for(int j = i; j< (k+i); j++){ term *= j; } sumVal += term; } return sumVal; } int main(){ int n = 4, k = 3; cout<<"The sum of series is "<<findSeriesSum(n, k); return 0; }
Đầu ra
The sum of series is 30
Giải pháp này không hiệu quả vì nó cần một vòng lặp lồng nhau làm cho thời gian kéo dài của thứ tự O (n 2 ).
Một giải pháp hiệu quả có thể sử dụng công thức chung cho chuỗi. Công thức là,
$ \ frac {(\ square + 1) * \ square * (\ square-1) * (\ square-2) * .... * (\ square- \ square + 1)} {\ square + 1} $
Chương trình minh họa hoạt động của giải pháp của chúng tôi
Ví dụ
#include <iostream> using namespace std; int findSeriesSum(int n, int k){ int sumVal = 1; for(int i = n+1; i > n-k; i--) sumVal *= i; sumVal /= (k + 1); return sumVal; } int main(){ int n = 4, k = 3; cout<<"The sum of series is "<<findSeriesSum(n, k); return 0; }
Đầu ra
The sum of series is 30