इस समस्या में, हमें एक श्रृंखला के लिए दो संख्याएं n और k दी गई हैं। हमारा कार्य C++ में दी गई श्रृंखला का योग ज्ञात करने का एक प्रोग्राम बनाना है।
श्रृंखला है -
(1*2*3*...*k) + (2*3*...k*(k+1)) + (3*4*...*k*k+1*k+2) + ((n-k+1)*(nk+ 2)*... *(n-k+k).
समस्या विवरण - यहां, हम दिए गए k के मान के आधार पर nवें पद तक दी गई श्रृंखला का योग ज्ञात करेंगे।
आइए एक उदाहरण लेकर समस्या को समझते हैं
इनपुट
n = 4, k = 3
आउटपुट
30
व्याख्या
श्रृंखला: (1*2*3) + (2*3*4) = 30
समाधान दृष्टिकोण
एक सरल समाधान पुनरावृत्ति का उपयोग करके योग ढूंढना है। हम दो लूप का उपयोग करेंगे, एक प्रत्येक पद के लिए और दूसरा पद का मान ढूंढने के लिए। फिर प्रत्येक पद के मान को जोड़कर परिणाम प्राप्त करेंगे।
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#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; }आउटपुट
The sum of series is 30
यह समाधान कुशल नहीं है क्योंकि इसमें एक नेस्टेड लूप की आवश्यकता होती है जो समय जटिलता को O(n2) क्रम का बना देता है।
एक कुशल समाधान श्रृंखला के लिए सामान्य सूत्र का उपयोग करना हो सकता है। सूत्र है,
$\frac{(n+1)*n*(n-1)*(n-2)*....*(n-k+1)}{k+1}$
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#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; }आउटपुट
The sum of series is 30