技術共有

Huawei コンピュータベース試験の実際の質問 - バスケットボール ゲーム

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

トピックの説明:

幼稚園にひっくり返った樽があります。線状構造 、バスケットボールはバケツの右側にしか置くことができませんが、バスケットボールはバケツの左側または右側から取り出すことができます。それぞれのバスケットボールには個別の番号が付いています。教師は一度に 1 つ以上のバスケットボールを入れることができます。子供たちはバケツの中にバスケットボールが 1 つしか入っていない場合のみ取り出すことができます。バケツの左側から取り出します。

たとえば、教師が 1、2、3、4、5 の番号が付けられた 5 つのバスケットボールを順番に置くと、子供たちは「1、2、3、4、5」または「3、1、2、バスケットボールには順番に「4,5」と番号が振られていますが、「5,1,3,2,4」と番号が振られたバスケットボールは取り出すことができません。このうち、連番「3,1,2,4,5」の取り出しシナリオは、 1,2,3 を連続して入れる → 右から 3 番を取り出す → から 1 番を取り出す左→左から2番を取り出す→4番を入れる→左から4番を取り出す→5番を入れる→左から5番を取り出す。簡単のため、左から取り出すバスケットボールをL、右から取り出すバスケットボールをRとします。このときのバスケットボールの順序は「 RLLLL 」となります。

説明を入力してください:

最初の行の数字は、教師が順番に配置するバスケットボールの番号として機能します。
2 行目の数字は、入れられた順序で取り出せるかどうかを確認するバスケットボールの番号として使用されます。
その中で、バスケットボールの番号はカンマで区切られています。

出力の説明:

各バスケットボールの除去シーケンスについて、実際に取得できる場合は、左右の操作に従って除去シーケンスを出力してください。そうでない場合は、「NO」を出力してください。

特別な注意事項:
1. 1<= バスケットボールの数、バスケットボールの数<= 200;
2. バスケットボールの数字は繰り返されません。
3. 出力結果の LR は大文字である必要があります。

例 1:

入力
4,5,6,7,0,1,2
6,4,0,1,2,5,7


出力
うわあああああ
注:バスケットボールを取り出す順番は「右、左、右、右、右、左、左」です。

例 2:

入力
4,5,6,7,0,1,2
6,0,5,1,2,4,7


出力:
いいえ
説明: 該当配列のバスケットボールは取り出せません

例 3:

入力
1,2,3,4
1,2,3,5


出力
いいえ
説明: 5 番のバスケットボールがないため、対応する番号のデータを取得できません。

C++ ソース コード:

  1. #include <iostream>
  2. #include <sstream>
  3. #include <queue>
  4. #include <string>
  5. #include <vector>
  6. using namespace std;
  7. int main() {
  8. ios::sync_with_stdio(false);
  9. cin.tie(nullptr);
  10. queue<int> ball, get;
  11. deque<int> list;
  12. string input;
  13. getline(cin, input); // 获取第一行数据,篮球的放入顺序
  14. stringstream ss(input);
  15. string temp;
  16. while (getline(ss, temp, ',')) {
  17. ball.push(stoi(temp));
  18. }
  19. getline(cin, input); // 获取第二行数据,篮球的取出顺序
  20. ss.clear();
  21. ss.str(input);
  22. while (getline(ss, temp, ',')) {
  23. get.push(stoi(temp));
  24. }
  25. int ballNum = 0; // 统计输入的字符串中篮球编号的个数
  26. for (int i = 0; i < input.size(); i++)
  27. {
  28. if (input[i] != ',') {
  29. ballNum++;
  30. }
  31. }
  32. string direction; // 对篮球的取出顺序进行记录
  33. while (!get.empty()) {
  34. if (list.empty() && !ball.empty()) {
  35. list.push_back(ball.front());
  36. ball.pop();
  37. }
  38. if (list.empty()) {
  39. break;
  40. }
  41. int tempL = list.front(), tempR = list.back();
  42. int temp = get.front();
  43. if (temp == tempL) {
  44. get.pop();
  45. list.pop_front();
  46. direction = direction + 'L';
  47. }
  48. else if (temp == tempR) {
  49. get.pop();
  50. list.pop_back();
  51. direction = direction + 'R';
  52. }
  53. else {
  54. if (ball.empty()) {
  55. break;
  56. }
  57. list.push_back(ball.front());
  58. ball.pop();
  59. }
  60. }
  61. // 输出取出顺序
  62. if (ballNum == direction.size()) {
  63. cout << direction << endl;
  64. }
  65. else {
  66. cout << "NO" << endl;
  67. }
  68. system("pause");
  69. return 0;
  70. }