C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

ゲスト出演記録を確認した後、部屋の状態を確認するC++プログラム


'L'、'R'、および0から9までの数字を持つ文字列Sがあるとします。左から右に0から9まで番号が付けられた10の部屋があるホテルがあるとします。ホテルには2つの入り口があります。1つは左側から、もう1つは右側からです。顧客が左の入り口からホテルに到着すると、左の入り口に最も近い空の部屋があります。同様に、顧客が右側の入り口からホテルに到着すると、右側の入り口に最も近い空の部屋が表示されます。しかし、部屋の割り当てリストを失いました。しかし、私たちはすべての顧客を覚えています。顧客がいつ到着したか、どの入口から、そしていつホテルを出たかです。当初、ホテルは空でした。部屋の割り当てリストをメモリから復元する必要があります。 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. GCDを見つけるためのC++プログラム

    2つの数値の最大公約数(GCD)は、両方を除算する最大の数値です。 例:45と27の2つの数字があるとします。 45 = 5 * 3 * 3 27 = 3 * 3 * 3 したがって、45と27のGCDは9です。 2つの数値のGCDを見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int gcd(int a, int b) {    if (b == 0)    return a;    return gcd(b, a % b); } int

  2. 階乗を見つけるためのC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:5の階乗は120です。 5! = 5 * 4 * 3 * 2 *1 5! = 120 整数の階乗は、再帰プログラムまたは非再帰プログラムを使用して見つけることができます。これらの両方の例を以下に示します。 非再帰プログラムを使用した階乗 forループを使用して、数値の階乗を見つけることができます。これは、次のプログラムを使用して示されます- 例 #include <iostream> using namespace std; int main() {    int n = 5, fact = 1