इस समस्या में, हमें एक श्रृंखला के लिए दो संख्याएँ 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
स्पष्टीकरण
Series: (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(n 2 की समय जटिलता को बनाता है। )।
एक कुशल समाधान श्रृंखला के लिए सामान्य सूत्र का उपयोग किया जा सकता है। सूत्र है,
$\frac{(\square+1)*\square*(\square-1)*(\square-2)*....*(\square-\square+1)}{\square+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