기술나눔

Huawei 컴퓨터 기반 시험--농구 게임

2024-07-12

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

주제 설명:

유치원에 뒤집힌 통이 있습니다.선형 구조 , 농구공은 물통의 오른쪽에만 놓을 수 있지만 농구공은 물통의 왼쪽이나 오른쪽에 꺼낼 수 있습니다. 각 농구공에는 별도의 번호가 있습니다. 교사는 한 번에 하나 이상의 농구공을 넣을 수 있습니다. 어린이는 양동이에 농구공이 하나만 있을 경우에만 농구공을 꺼낼 수 있습니다. 양동이의 왼쪽에서 꺼냅니다.

예를 들어, 교사가 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 "입니다.

설명 입력:

첫 번째 줄의 숫자는 교사가 순서대로 입력하는 농구 번호 역할을 합니다.
두 번째 줄의 숫자는 넣은 순서대로 꺼낼 수 있는지 확인하기 위해 농구 번호로 사용됩니다.
그 중 농구 번호는 쉼표로 구분되어 있습니다.

출력 설명:

각 농구공의 제거 순서에 대해 실제로 얻을 수 있는 경우 왼쪽 및 오른쪽 작업에 따라 제거 순서를 인쇄하십시오. 그렇지 않으면 "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. }