• 5-18 银行业务队列简单模拟 (25分)


    5-18 银行业务队列简单模拟   (25分)

    设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。

    输入格式:

    输入为一行正整数,其中第1个数字N(le≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。

    输出格式:

    按业务处理完成的顺序输出顾客的编号。数字间以空格分隔,但最后一个编号后不能有多余的空格。

    输入样例:

    8 2 1 3 9 4 11 13 15
    

    输出样例:

    1 3 2 9 11 4 13 15

    STL__queue 队列

    一、原理queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表。插入一端称为队尾,删除一端称为队首。

    默认使用双端队列deque来实现,queue也可看成一个容器适配器,将 deque 容器转换为 queue 容器。当然,也可以利用其他合适的序列容器作

    为底层实现queue容器。

    C++ STL对queue队列的泛化,是通过模板类型,将默认的deque双端队列类型导入,在内部创建一个序列容器对象,来处理 queue队列的数据存储和操作,包括queue队列是否为空、取队首元素、取队尾元素、元素入队和元素出队等。由于仅需要取队首和队尾元素的操作,因此queue队列容器并不提供任何类型的迭代器。

    二、应用

    1、创建

    (1)queue() 默认的构造函数,创建一个空的 queue 对象。

    queue<int> q;//使用默认的双端队列为底层容器创建了一个空的queue队列对象q,数据元素为int类型

    (2)queue(const queue&) 复制构造函数,用一个queue对象创建新的queue对象。

    //queue<int, list<int> > q1;

    queue<int, list<int> > q2(q1);//以双向链表为底层容器的queue对象

    2、入队和出队

    void push(const value_type& x) //插入队列

    void pop()//出队,从队列中删除

    3、取队首尾元素

    queue队列容器的front函数和back函数,可分别读取队首和队尾元素。

    (1)value_type& front() 读取队列的队首元素。

    (2)value_type& back() 读取队列的队尾元素。

    4、其它

    (1)bool empty() //判断空

    (2)size_type size() //队列大小

    代码:(第一次试着用STL容器写,哈哈。。。。)

     1 #include "stdio.h"
     2 #include "queue"
     3 #include "iostream"
     4 using namespace std;
     5 int main() {
     6     int num,i;
     7     scanf("%d", &num);
     8     queue<int> A,B;//定义两个队列
     9     for (int i = 0; i < num; i++) {
    10         int temp;
    11         scanf("%d", &temp);
    12         if(temp % 2){ //奇数
    13             A.push(temp);
    14         }
    15         else{
    16             B.push(temp);
    17             }
    18     }
    19     int flag = 0;
    //主要是为了让开头的输出没有空格
    20 if(!A.empty()){ 21 printf("%d", A.front());//A是奇数的情况 22 A.pop(); 23 i = 1; 24 } 25 else{//如果没有,就输出B 26 printf("%d", B.front());//B是偶数的情况 27 B.pop(); 28 } 29 while (!B.empty() || !A.empty()) {//至少一个非空 30 i++; 31 if(i % 2){ 32 if(!A.empty()){ 33 printf(" %d", A.front()); 34 A.pop(); 35 } 36 } 37 else{ 38 if(!A.empty()){ 39 printf(" %d", A.front()); 40 A.pop(); 41 } 42 if(!B.empty()){ 43 printf(" %d", B.front()); 44 B.pop(); 45 } 46 } 47 } 48 printf(" "); 49 return 0; 50 }
     
  • 相关阅读:
    cf605 div3
    how to find Longest Increasing Subsequence Size
    luogu1641 [SDOI2010]生成字符串
    luogu1441 砝码称重
    luogu4218 [JSOI2008] 最小生成树计数
    luogu1514 引水入城
    luogu1312 Mayan游戏 剪枝
    luogu1081 开车旅行 树上倍增
    luogu1052 过河
    luogu1026 统计单词个数
  • 原文地址:https://www.cnblogs.com/guohaoyu110/p/6358855.html
Copyright © 2020-2023  润新知