इस समस्या में, हमें एक पूर्णांक N दिया जाता है। कार्य श्रृंखला 1 2 2 3 3 3 4… में n-वाँ पद ज्ञात करना है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
N = 6
आउटपुट
3
स्पष्टीकरण
nवें पद तक की श्रृंखला 1, 2, 2, 3, 3, 3, ...
. हैसमाधान दृष्टिकोण
नेस्टेड लूप का उपयोग करके समस्या को हल करने का एक आसान तरीका है। लूप के लिए बाहरी 1 से n तक है। और आंतरिक लूप 1 से i (बाहरी लूप का पुनरावर्तक) तक है। आंतरिक लूप में प्रत्येक पुनरावृत्ति के लिए, श्रृंखला के तत्वों की संख्या की गणना करें और जब गिनती n के बराबर हो तो i का मान लौटाएं।
समस्या को हल करने के लिए एक अधिक कुशल दृष्टिकोण पैटर्न की स्थिति का उपयोग कर रहा है। अनुक्रम के तत्व श्रृंखला में उनकी स्थिति के साथ हैं -
Element 1: position 1 Element 2: position 2, 3 Element 3: position 4, 5, 6 Element 4: position 7, 8, 9, 10
इन मानों के लिए, हम श्रृंखला में तत्व की अंतिम स्थिति का उपयोग करके एक श्रृंखला बना सकते हैं, जो है,
1, 3, 6, 10, 15, 21, 28, ….
x पद में प्रकट होता है, 1 + 2 + 3 +… + (x-2) + (x-1)...
इसे n =x*(x-1)/2
. के रूप में सामान्यीकृत किया जा सकता है2n =x 2 - x => x 2 - x - 2n =0
द्विघात समीकरण को हल करने के लिए सूत्र का उपयोग करके समीकरण को हल करें,
$$x=1/2*(1+\sqrt{1+8*n)}$$
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include <bits/stdc++.h> using namespace std; int findNthTerm(int n) { int x = (((1) + (double)sqrt(1 + (8 * n))) / 2); return x; } int main(){ int n = 12; cout<<"The series is 1, 2, 2, 3, 3, 3, 4, 4, ...\n"; cout<<n<<"th term of the series is "<<findNthTerm(n); return 0; }
आउटपुट
The series is 1, 2, 2, 3, 3, 3, 4, 4, ... 12th term of the series is 5