Partage de technologie

Questions réelles sur l'examen informatique Huawei - Jeu de basket-ball

2024-07-12

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

Description du sujet:

Il y a un tonneau renversé dans le jardin d'enfants.structure linéaire , le ballon de basket ne peut être placé que sur le côté droit du seau, mais le ballon de basket peut être retiré du côté gauche ou droit du seau. Chaque ballon de basket a un numéro distinct. L'enseignant peut mettre un ou plusieurs ballons de basket à la fois. Les enfants peuvent retirer le ballon de basket du côté gauche ou droit du seau. Lorsqu'il n'y a qu'un seul ballon de basket dans le seau, ils ne peuvent le prendre. sortez-le du côté gauche du seau.

Par exemple, si l'enseignant met dans l'ordre cinq ballons de basket numérotés 1, 2, 3, 4 et 5, alors les enfants peuvent retirer les chiffres « 1,2,3,4,5 » ou « 3,1,2, Les ballons de basket numérotés « 4,5 », mais les ballons de basket numérotés « 5,1,3,2,4 » ne peuvent pas être retirés. Parmi eux, le scénario de retrait du numéro de séquence « 3,1,2,4,5 » est le suivant : mettre les chiffres 1,2,3 en continu -> retirer le numéro 3 par la droite -> retirer le numéro 1 de la gauche -> retirer le numéro 2 par la gauche -> Mettre le numéro 4 dedans -> Retirer le numéro 4 par la gauche -> Mettre le numéro 5 -> Retirer le numéro 5 par la gauche Pour le bien de. simplicité, on utilise L pour représenter le ballon de basket sorti à gauche et R pour représenter le ballon de basket sorti à droite. L'ordre des ballons de basket à ce moment La séquence récupérée est " RLLLL " ;

Entrez la description :

Les chiffres de la première rangée servent de numéros de basket-ball que l'enseignant met en séquence ;
Les numéros de la deuxième ligne sont utilisés comme numéros de basket-ball à vérifier pour voir s'ils peuvent être retirés dans l'ordre dans lequel ils ont été placés ;
Parmi eux, les numéros de basket sont séparés par des virgules.

Description de la sortie :

Pour la séquence de retrait de chaque ballon de basket, si elle peut effectivement être obtenue, veuillez imprimer la séquence de retrait selon les opérations de gauche et de droite, sinon imprimer « NON » ;

éléments d'attention particulière :
1. 1<=le numéro du ballon de basket, le nombre de ballons de basket<=200 ;
2. Les chiffres sur le ballon de basket ne se répètent pas ;
3. LR dans les résultats de sortie doit être en majuscule ;

Exemple 1:

entrer
4,5,6,7,0,1,2
6,4,0,1,2,5,7


sortir
RLRRRLL
Remarque : L'ordre de retrait du ballon de basket est "droite, gauche, droite, droite, droite, gauche, gauche".

Exemple 2 :

entrer
4,5,6,7,0,1,2
6,0,5,1,2,4,7


Sortir:
NONN
Description : Le ballon de basket de la séquence correspondante ne peut pas être retiré

Exemple 3 :

entrer
1,2,3,4
1,2,3,5


sortir
NONN
Explication : Il n'y a pas de ballon de basket numéroté 5, donc les données numérotées correspondantes ne peuvent pas être récupérées.

Code source 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. }