इस समस्या में, हमें एक संख्या n दी गई है जो श्रृंखला के nवें पद को दर्शाती है। हमारा कार्य C++ में श्रृंखला 1 + 2 + 2 + 3 + 3 + 3 + .. + n का योग ज्ञात करने का एक प्रोग्राम बनाना है।
समस्या विवरण - यहां, हम उस श्रृंखला का योग ज्ञात करेंगे जिसका nवां पद n बार संख्या n का योग है। इसका मतलब यह वर्ग संख्याओं की एक श्रृंखला है।
आइए एक उदाहरण लेकर समस्या को समझते हैं
इनपुट
n = 4
आउटपुट
30
व्याख्या
चौथे पद तक श्रृंखला का योग = 1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 = 30
समाधान दृष्टिकोण
समस्या का सबसे प्रभावी समाधान दिए गए श्रृंखला के योग के लिए सामान्य सूत्र का उपयोग करना होगा।
लेकिन आइए समस्या के उन सभी संभावित समाधानों पर चर्चा करें जो कोई सोच सकता है।
सबसे सरल समाधान सीधे n तक श्रृंखला की संख्याओं को जोड़कर समस्या का समाधान करना है। इसके लिए दो नेस्टेड लूप की आवश्यकता होगी, एक पद के लिए और आंतरिक प्रत्येक पद में मानों के लिए।
एल्गोरिदम
आरंभ करें - sumVar = 0;
- चरण 1 - i -> 1 से n तक लूप।
- चरण 1.1 - j -> 1 से i तक लूप।
- चरण 1.1.1 - sumVar अपडेट करें, sumVar+=i;
- चरण 1.1 - j -> 1 से i तक लूप।
- चरण 2 - sumVar प्रिंट करें।
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#include <iostream> using namespace std; int calcSeriesSum(int n){ int sumVar = 0; for(int i = 1; i <= n; i++){ for(int j = 1; j <= i; j++){ sumVar += i; } } return sumVar; } int main(){ int n = 7; cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n); return 0; }आउटपुट
The sum of series till 7 is 140
यह समाधान सरल है लेकिन प्रभावी नहीं है क्योंकि इसमें दो नेस्टेड लूप हैं जिससे इसकी समय जटिलता O(n2) क्रम की है।
एक प्रभावी समाधान इस तथ्य पर आधारित है कि यदि किसी संख्या (n) को स्वयं n बार जोड़ा जाता है। तो, परिणाम संख्या को स्वयं से गुणा करके प्राप्त किया जा सकता है।
अर्थात 5+5+5+5+5 = 5*5।
तो, हम समस्या को हल करने के लिए एक लूप के बजाय गुणन का उपयोग कर सकते हैं।
एल्गोरिदम
आरंभ करें - sumVal = 0;
- चरण 1 - i -> 0 से n तक लूप।
- चरण 2 - sumVal अपडेट करें, sumVal += (i*i)
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#include <iostream> using namespace std; int calcSeriesSum(int n){ int sumVar = 0; for(int i = 1; i <= n; i++){ sumVar += (i*i); } return sumVar; } int main(){ int n = 7; cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n); return 0; }आउटपुट
The sum of series till 7 is 140
यह समाधान बेहतर है क्योंकि इसमें केवल एक लूप लगता है और इसकी समय जटिलता O(n) क्रम की है। लेकिन यह सबसे अच्छा संभव समाधान नहीं है क्योंकि वही O(1) समय जटिलता में किया जा सकता है।
सबसे प्रभावी समाधान दिए गए श्रृंखला के योग के लिए सामान्य सूत्र का उपयोग करना है।
श्रृंखला का योग =
1 + 2 + 2 + 3 + 3 + 3 + …. N.
इसे इस प्रकार बनाया जा सकता है
1 + (2+2) + (3+3+3) + … + (N+N+N..N) 1*1 + 2*2 + 3*3 + … N*N. 1^2 + 2^2 + 3^2 + … N^2.
$Sum =\sum_{i=1}^n i^2$
वर्गों के योग का सूत्र n*(n+1)*(2n+1)/6 है। और हम इस सूत्र का उपयोग करके भी योग ढूंढ सकते हैं।
हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#include <iostream> using namespace std; int calcSeriesSum(int n){ int sumVar = 0; sumVar = ((n*(n + 1)*( 2 * n + 1))/6 ); return sumVar; } int main(){ int n = 7; cout<<"The sum of series till "<<n<<" is "<<calcSeriesSum(n); return 0; }आउटपुट
The sum of series till 7 is 140