इस समस्या में, हमें एक वैध तरीका ढूंढना है जिससे धनात्मक दिशा या ऋणात्मक दिशा में इस तरह चलें कि हम उपयोगकर्ता द्वारा प्रदान की गई एक निश्चित सीमा के भीतर रहें।
यहां, हमें एक निश्चित अधिकतम सीमा K दी गई है, जो वह अधिकतम मान है जिस तक हम चल सकते हैं और चलने के लिए n धनात्मक मानों की एक सरणी है। हमें अनुक्रम लौटाना है यानी धनात्मक या ऋणात्मक दिशाएं ताकि यह कभी भी K मान को पार न करे।
आइए एक उदाहरण लेकर इस विषय को बेहतर ढंग से समझते हैं,
Input : K = 56 and the array is [25 , 14 , 31 , 16 , 5]. Output : positive positive negative positive positive.
व्याख्या
पहले हम जांचेंगे कि 0 + a[0] = 0+25 = 25 < 56 हां, तो हम धनात्मक दिशा में चलेंगे।
अब, हम जांचेंगे कि 25 + a[1] = 25+14 = 39 < 56 हां, तो हम धनात्मक दिशा में चलेंगे।
अब, हम जांचेंगे कि 29 + a[2] = 39+31 = 70 < 56 नहीं, तो हम जांचेंगे कि 39 - a[2] = 39 - 31 = 8 > 0, तो हम ऋणात्मक दिशा में चलेंगे।
हम जांचेंगे कि 8 + a[3] = 8+16 = 24 < 56 हां, तो हम धनात्मक दिशा में चलेंगे।
हम जांचेंगे कि 16 + a[4] = 16 + 5 = 21 < 56 हां, तो हम धनात्मक दिशा में चलेंगे।
तो, अब आइए इस समस्या को हल करने का तर्क बनाते हैं। हमें जांचना होगा कि धनात्मक दिशा में चलने से सीमा तक पहुंच जाएगी या नहीं। यदि नहीं, तो धनात्मक दिशा में चलें। अन्यथा, जांचें कि ऋणात्मक दिशा में चलने से निचली सीमा यानी 0 तक पहुंच जाएगी। यदि नहीं, तो ऋणात्मक दिशा में चलें। यदि दोनों हां हैं तो असंभव लौटाएं।
इस तर्क के आधार पर हमारे कोड बनाने के लिए पालन करने वाला एल्गोरिदम है -
एल्गोरिदम
प्रारंभ में स्थिति को 0 पर सेट करें। चरण 1 : i -> 0 से n तक, n सरणी की लंबाई है। चरण 2-4 का पालन करें। चरण 2 : यदि initial_postition + a[i] < K, initial_position += a[i]। "POSITIVE" प्रिंट करें। चरण 3 : अन्यथा यदि initial_postition - a[i] > 0, initial_position -= a[i]। "NEGATIVE" प्रिंट करें। चरण 4 : अन्यथा, "NO MORE VALID MOVES" प्रिंट करें।
उदाहरण
अब, आइए एल्गोरिदम के कार्यान्वयन को दर्शाने वाला एक प्रोग्राम बनाते हैं,
#include <iostream> using namespace std; void StepsTaken(int a[], int n, int k){ string res = ""; int position = 0; int steps = 1; for (int i = 0; i < n; i++) { if (position + a[i] <= k && position + a[i] >= (-k)) { position += a[i]; cout<<"POSITIVE \t"; } else if (position - a[i] >= -k && position - a[i] <= k) { position -= a[i]; cout<<"NEGATIVE \t"; } else { cout << -1; return; } } cout << res; } int main(){ int a[] = { 12 , 24 , 9 , 17 , 8}; int n = sizeof(a) / sizeof(a[0]); int k = 40; StepsTaken(a, n, k); return 0; } आउटपुट
POSITIVE POSITIVE NEGATIVE NEGATIVE POSITIVE