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

C++ प्रोग्राम: अतिथि उपस्थिति रिकॉर्ड जांचने के बाद कमरे की स्थिति ढूंढें


मान लीजिए हमारे पास 'L', 'R' और 0 से 9 तक के अंकों वाली एक स्ट्रिंग S है। मान लें कि 10 कमरों वाला एक होटल है जो बाएं से दाएं 0 से 9 तक संख्यांकित हैं। होटल में दो प्रवेश द्वार हैं - एक बाईं ओर से, और दूसरा दाईं ओर से। जब कोई ग्राहक बाएं प्रवेश द्वार के माध्यम से होटल में आता है, तो उसे बाएं प्रवेश द्वार के सबसे निकट का खाली कमरा मिलता है। इसी तरह, जब कोई ग्राहक दाएं प्रवेश द्वार के माध्यम से होटल में आता है, तो उसे दाएं प्रवेश द्वार के सबसे निकट का खाली कमरा मिलता है। लेकिन हमने कमरा आवंटन सूची खो दी है। लेकिन हमें सभी ग्राहक याद हैं: जब कोई ग्राहक आया, किस प्रवेश द्वार से, और जब उन्होंने होटल छोड़ा। प्रारंभ में होटल खाली था। हमें मेमोरी से कमरा आवंटन सूची पुनर्प्राप्त करनी है। S में, 'L' का अर्थ है कि व्यक्ति बाईं ओर से आया, यदि यह 'R' है तो वह दाईं ओर से आया, और अंक d इंगित करता है कि ग्राहक कमरा d छोड़ देता है। हमें कमरे की स्थिति वापस करनी है। एक स्ट्रिंग जिसकी लंबाई 10 है और जिसमें 0 का अर्थ है कमरा खाली है, अन्यथा यह भरा हुआ है।

उदाहरण के लिए, यदि इनपुट S = "LLRL1RL1" है, तो आउटपुट "1010000011" होगा, क्योंकि

सबसे पहले, सभी कमरे खाली हैं। स्थिति 0000000000।

L - ग्राहक बाएं प्रवेश द्वार के माध्यम से होटल में आता है। स्थिति 1000000000।

L - बाएं प्रवेश द्वार से ग्राहक। स्थिति 1100000000।

R - दाएं प्रवेश द्वार से ग्राहक। स्थिति 1100000001।

L - बाएं प्रवेश द्वार से ग्राहक। स्थिति 1110000001।

1 - कमरा 1 में ग्राहक निकलता है। स्थिति 1010000001।

R - दाएं प्रवेश द्वार से ग्राहक। स्थिति 1010000011।

L - बाएं प्रवेश द्वार से ग्राहक। स्थिति 1110000011।

1 - कमरा 1 में ग्राहक निकलता है। स्थिति 1010000011।

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

n := size of S a := "0000000000" for initialize i := 0, when i < n, update (increase i by 1), do:    if S[i] is same as 'L', then:       set left most 0 in a to 1    if S[i] is same as 'R', then:       set right most 0 in a to 1    Otherwise       set S[i]th place in a to 0 return a

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; string solve(string S) {    int n = S.size();    string a = "0000000000";    for (int i = 0; i < n; i++) {       if (S[i] == 'L')          a[a.find('0')] = '1';       if (S[i] == 'R')          a[a.rfind('0')] = '1';       else          a[S[i] - '0'] = '0';    }    return a; } int main() {    string S = "LLRL1RL1";    cout << solve(S) << endl; }

इनपुट

"LLRL1RL1"

आउटपुट

1010000011
  1. - C++ प्रोग्राम: LCM (लघुत्तम समापवर्त्य) खोजें

    परिचयदो संख्याओं का लघुत्तम समापवर्त्य (LCM) वह सबसे छोटी संख्या है जो दोनों का गुणक है। उदाहरण के लिए: मान लें हमारे पास दो संख्याएं हैं: 15 और 9। 15 = 5 * 3 9 = 3 * 3 इसलिए, 15 और 9 का LCM 45 है। उदाहरण (लूप का उपयोग करके)#include <iostream> using namespace std; int main() { int a = 7,

  1. - C++ प्रोग्राम: GCD (महत्तम समापवर्तक) खोजें

    परिचयदो संख्याओं का महत्तम समापवर्तक (GCD) वह सबसे बड़ी संख्या है जो दोनों को विभाजित करती है। उदाहरण के लिए: मान लें हमारे पास दो संख्याएं हैं 45 और 27। 45 = 5 * 3 * 3 27 = 3 * 3 * 3 इसलिए, 45 और 27 का GCD 9 है। उदाहरण 1 (यूक्लिडियन एल्गोरिदम)#include <iostream> using namespace std; int gcd(

  1. - C++ प्रोग्राम: फैक्टोरियल खोजें

    परिचयएक गैर-ऋणात्मक पूर्णांक n का फैक्टोरियल उन सभी धनात्मक पूर्णांकों का गुणनफल है जो n से कम या बराबर हैं। उदाहरण के लिए: 5 का फैक्टोरियल 120 है। 5! = 5 * 4 * 3 * 2 * 1 5! = 120 एक पूर्णांक का फैक्टोरियल रिकर्सिव प्रोग्राम या नॉन-रिकर्सिव प्रोग्राम का उपयोग करके पाया जा सकता है। दोनों के उदाहरण नी