蓝桥杯练习题 <银行队列>

题目描述

CLZ 银行只有两个接待窗口,VIP窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M次操作,操作有四种类型,如下:

  • IN name V:表示一名叫 name 的用户到 VIPVIP 窗口排队
  • OUT V:表示 VIPVIP 窗口队头的用户离开排队
  • IN name N:表示一名叫 name 的用户到普通窗口排队
  • OUT N:表示普通窗口队头的用户离开排队

求 M次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。

输入描述

第一行是一个整数 M(1≤M≤1000),表示一共有 M次操作。

第二行到第 M+1行输入操作,格式如下:

  • IN name V
  • OUT V
  • IN name N
  • OUT N

输出描述

输出 M次操作后 VIP窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗口队列。

输入输出样例

示例 1

输入

5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V

输出

Adel
CLZ
laozhao

 这道题可以直接用C++的queue容器,然后注意下几个点:queue容器没有迭代器,更不支持随机访问,然后pop()是移除并没有返回值,要返回值的用front()或back();然后其他的就比较容易了

我的做法如下:
 

#include <iostream>
#include <queue>
using namespace std;
#include <string>

//定义两个队列
queue<string> V,N;

int main()
{
  // 请在此输入您的代码
  int M;
  string flag,name;    //flag判断是进还是出
  char type;           //type判断是vip客户否
  cin >> M;

  //做M次操作
  for(int i=1;i<=M;i++)
  {
    cin >> flag;
    if(flag=="IN")
    {
      cin >> name >> type;
      if(type=='N')
      {
         N.push(name); 
      }else if(type=='V')
      {
        V.push(name);
      }
    }else if(flag=="OUT")      //这里注意当为out时下面输入只用type而不用name
    {
      cin >> type;
      if(type=='N')
      {
         N.pop(); 
      }else if(type=='V')
      {
        V.pop();
      }
    }
  }
  //注意 队列不提供迭代器,更不支持随机访问
  while(!V.empty())
  {
    cout << V.front() <<endl;
    V.pop();
  }

  while(!N.empty())
  {
    cout << N.front() <<endl;
    N.pop();
  }

  return 0;
}

猜你喜欢

转载自blog.csdn.net/mc10141222/article/details/123696953