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

अतिथि उपस्थिति रिकॉर्ड की जाँच के बाद कमरे की स्थिति खोजने के लिए C++ प्रोग्राम

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

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

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

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

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

आर - दाहिने प्रवेश द्वार से ग्राहक। स्थिति 110000001.

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

1 - ग्राहक कमरे में 1 छोड़ देता है। स्थिति 10100000001.

आर - दाहिने प्रवेश द्वार से ग्राहक। स्थिति 1010000011.

एल - बाएं प्रवेश द्वार से ग्राहक। स्थिति 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. एलसीएम खोजने के लिए सी ++ प्रोग्राम

    दो संख्याओं का अल्पतम समापवर्तक (LCM) वह छोटी से छोटी संख्या है जो दोनों का गुणज है। उदाहरण के लिए:मान लें कि हमारे पास निम्नलिखित दो संख्याएं हैं:15 और 9. 15 = 5 * 3 9 = 3 * 3 तो, 15 और 9 का एलसीएम 45 है। दो संख्याओं का LCM ज्ञात करने का कार्यक्रम इस प्रकार दिया गया है - उदाहरण #include <iost

  1. सी ++ प्रोग्राम जीसीडी खोजने के लिए

    दो संख्याओं का सबसे बड़ा सामान्य भाजक (GCD) उन दोनों को विभाजित करने वाली सबसे बड़ी संख्या है। उदाहरण के लिए:मान लें कि हमारे पास 45 और 27 दो संख्याएँ हैं। 45 = 5 * 3 * 3 27 = 3 * 3 * 3 तो, 45 और 27 का GCD 9 है। दो संख्याओं का GCD ज्ञात करने का कार्यक्रम इस प्रकार दिया गया है। उदाहरण #include <

  1. सी ++ प्रोग्राम फैक्टोरियल खोजने के लिए

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