इस समस्या में, हमें एक संख्या n दी गई है जो श्रृंखला के उस nवें पद को दर्शाती है। हमारा काम एक सीरीज 1 + 2 + 2 + 3 +3 + 3 + .. + n C++ में योग खोजने के लिए प्रोग्राम बनाना है। ।
समस्या का विवरण - यहाँ, हम उस श्रेणी का योग ज्ञात करेंगे जिसका nवाँ पद संख्या n के योग का n गुना है। इसका मतलब है कि यह वर्ग संख्याओं की एक श्रृंखला है।
समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट
n = 4
आउटपुट
30
स्पष्टीकरण
चौथे पद तक श्रृंखला का योग =1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 =30
समाधान दृष्टिकोण
समस्या का सबसे प्रभावी समाधान श्रृंखला के योग के लिए सामान्य सूत्र का उपयोग करना होगा।
लेकिन आइए उस समस्या के सभी संभावित समाधानों पर चर्चा करें जिसके बारे में कोई सोच सकता है।
सरल समाधान n तक श्रंखला की संख्याओं को जोड़ने से समस्या का सीधा संबंध है। इसके लिए दो नेस्टेड लूप की आवश्यकता होगी, एक टर्म का और प्रत्येक टर्म में मानों के लिए आंतरिक लूप।
एल्गोरिदम
आरंभ करें - योगवर =0;
- चरण 1 - i -> 1 से n के लिए लूप।
- चरण 1.1 - j के लिए लूप -> 1 से i.
- चरण 1.1.1 − समवर, समवार+=i; . को अपडेट करें
- चरण 1.1 - j के लिए लूप -> 1 से i.
- चरण 2 - समवार प्रिंट करें।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम
उदाहरण
#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.
इसलिए, हम समस्या को हल करने के लिए एक लूप के बजाय गुणन का उपयोग कर सकते हैं।
एल्गोरिदम
आरंभ करें - समवैल =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(1) समय जटिलता में किया जा सकता है।
सबसे प्रभावी समाधान दी गई श्रृंखला के योग के लिए एक सामान्य सूत्र का उपयोग कर रहा है।
श्रृंखला का योग =
1 + 2 + 2 + 3 + 3 + 3 +…. एन.
इसे इस प्रकार बनाया जा सकता है
1 + (2+2) + (3+3+3) + … + (N+N+N..N) 1*1 + 2*2 + 3*3 + … N*N. 12 + 22 + 32 + … N2.
$Sum =\sum_{\square=1}^\square\blacksquare\square^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