Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में [-k, +k] सीमा के भीतर रहने के लिए चाल की दिशा प्रिंट करें


इस समस्या में, हमें एक वैध तरीका ढूंढना है जिससे धनात्मक दिशा या ऋणात्मक दिशा में इस तरह चलें कि हम उपयोगकर्ता द्वारा प्रदान की गई एक निश्चित सीमा के भीतर रहें।

यहां, हमें एक निश्चित अधिकतम सीमा 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

  1. - C++ में पक्षों के अनुपात वाली आयतों की संख्या गिनें जो रेंज [a,b] में है

    समस्या विवरण आयतों के पक्ष दिए गए हैं और रेंज चर first और last। लक्ष्य उन आयतों की संख्या ज्ञात करना है जिनके पक्षों की लंबाई/चौड़ाई का अनुपात रेंज [first, last] में है। उदाहरण इनपुट rec[] = { { 200, 210 }, { 100, 50 }, { 300, 190}, {180, 200}, {300, 200}} and first = 1.0, last = 1.6 आउटपुट पक्षों

  1. C++ प्रोग्राम में बाइनरी ट्री में अधिकतम उप-ट्री योग जैसे कि उप-ट्री BST भी हो C++ प्रोग्राम में बाइनरी ट्री में अधिकतम उप-ट्री योग जैसे कि उप-ट्री BST भी हो

    इस समस्या में, हमें एक बाइनरी ट्री BT दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो बाइनरी ट्री में अधिकतम उप-ट्री योग ढूंढे जैसे कि उप-ट्री भी एक BST हो। बाइनरी ट्री में एक विशेष शर्त होती है कि प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं। बाइनरी सर्च ट्री एक ट्री है जिसमें सभी नोड्स नीचे उ

  1. ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम ग्रिड में दी गई दिशा में संभावित चालों की गणना करने का C++ प्रोग्राम

    समस्या विवरण हमें n x m आकार का ग्रिड और प्रारंभिक बिंदु (x, y) दिया गया है। साथ ही चालों/कदमों के जोड़े दिए गए हैं जैसे (1,1), (2,2) आदि। प्रत्येक जोड़ा x और y अक्ष में कदम की इकाइयों को दर्शाता है। लक्ष्य ग्रिड की सीमाओं [1,n] x [1,m] के भीतर ली जा सकने वाली कुल चालों की संख्या ज्ञात करना है। उदा