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

输入格式:

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

输出格式:

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

输入样例:

8 2 1 3 9 4 11 13 15

输出样例:

1 3 2 9 11 4 13 15

解题思路:这道题的意思就是模拟队列,将偶数的数字存到b窗口,将奇数的数字存到a窗口,而且是先进先出,所以可以采用队列,将偶数的放在b队列,将奇数的放在a队列;然后每输出两个a队列中的元素再输出一个b队列中的元素;还有注意的一个点就是,最后是a队列中的元素结尾还是b队列中的元素结尾,这个要分情况讨论;主要是最后空格的规范问题;解法一:模拟队列代码如下:
  1 #include<iostream>
  2 using namespace std;
  3
  4
  5
  6 struct queue{
  7     int data[1005];      //用于存队列的数据;
  8     int tail;            //用来记录从尾部插入了多少个元素;
  9     int head;            //计数队头,方便取出队头的元素;
 10 };
 11
 12 void push(queue *q ,int  tmp )       //实现队列的push用法;传入类型为 queue 的指针 q;传入要入队的数tmp;
 13 {
 14     q->tail ++;                      //每入队一个元素,尾部计数器+1;
 15     q->data[q->tail] = tmp;          //将元素入队;
 16 }
 17
 18 int pop(queue *q)                    //取出队列的数字,从前端取出;此时要利用head记数;
 19 {
 20     q->head++;                     //每取一个,就将head+1,记数;
 21     return q->data[q->head];        //返回队头的元素;
 22 }
 23
 24 void init(queue *q)                   //初始化;
 25 {
 26     q->tail = -1 ;                     //将尾和头记数均初始化为-1;
 27     q->head = -1;
 28 }
 29
 30 int notEmpty(queue *q)                     //判断队列是否为空;
 31 {
 32     int i ;
 33     if(q->tail == q->head)              //如果尾和头的记数一样,则队列为空;
 34     {
 35         i = 0;
 36     }
 37     else
 38     i = 1;
 39     return i;                           //判断队列不为空;
 40 }
 41 int counta = 0,countb = 0;               //用counta 记录入a队列的个数;用countb  记录入b队列的个数;
 42 int main()
 43 {
 44     queue a ;          //定义,实例化a;
 45     queue b;           //定义,实例化b;
 46     init(&a);            //初始化a队列,并要用引用符号;
 47     init(&b);           //初始化b队列,并用引用符号;
 48     int n ;
 49     int c;
 50     cin>>n;
 51     for(int i = 0 ; i < n ; i++)
 52     {
 53         cin>>c;
 54         if(c%2==0)
 55         {
 56             push(&b,c);              //如果是偶数,则进b队列;
 57             countb++;             //countb相应+1;
 58         }
 59         else
 60         {
 61             push(&a,c);           //如果是奇数,则进a队列;
 62             counta++;             //counta相应+1;
 63         }
 64
 65     }
 66       //分情况,注意最后到底是a队列的数结尾还是b队列的数结尾,这影响格式;
 67     if(counta > countb *2)                //counta大于两倍countb,是a队列的元素结尾,则a最后一个元素后面不能加空格;
 68     {
 69             while(notEmpty(&a)||notEmpty(&b))        //当a队列不空或者b队列不空时;
 70         {
 71             if(notEmpty(&a))                    //a队列不空;
 72             {
 73                cout<<pop(&a);
 74                counta--;
 75                if(counta != 0)
 76                cout<<" ";
 77                cout<<pop(&a);                  //输出两个a队列的元素; 注意这里a最后一个元素后面不能加空格;
 78                counta--;
 79                if(counta != 0)
 80                cout<<" ";
 81             }
 82             if(notEmpty(&b))
 83             {
 84                 cout<<pop(&b);                //输出一个b队列的元素;
 85                 cout<<" ";
 86             }
 87         }
 88     }
 89     else
 90     if(counta <= countb *2)             //counta小于等于两倍countb,是b队列的元素结尾,则b最后一个元素后面不能加空格;
 91     {
 92             while(notEmpty(&a)||notEmpty(&b))
 93         {
 94             if(notEmpty(&a))
 95             {
 96                cout<<pop(&a);           //输出两个a队列的元素;
 97                cout<<" ";
 98                cout<<pop(&a);
 99                cout<<" ";
100             }
101             if(notEmpty(&b))
102             {
103                 cout<<pop(&b);           //输出一个b队列的元素,注意b队列最后一个元素的后面不能加空格;
104                 countb--;
105                 if(countb != 0)
106                 {
107                      cout<<" ";
108                 }
109
110             }
111         }
112     }
113
114
115
116     return 0;
117 }

解法二:直接用stl中的queue;

 1 #include<iostream>
 2 #include<queue>              //队列头文件
 3 using namespace std;
 4
 5
 6 long long int b[10005];
 7 queue<int>qa;        //定义一个qa队列,用于存放奇数
 8 queue<int>qb;        //定义一个qb队列,用于存放偶数;
 9 int tmp1;             //用于取出qa“每次最前” 的元素;
10 int tmp2;             //用于取出qa“每次最前” 的元素;
11 int n ;
12 int main()
13 {
14     cin>>n;
15     for(int i = 0 ; i < n ; i++)
16     {
17         cin>>b[i];
18         if(b[i]%2==0)
19         qb.push(b[i]);     //如果为偶数,则放入qb队列;
20         else
21         qa.push(b[i]);      //如果为奇数,则放入qa队列;
22     }
23
24     int counta = qa.size();        //用counta 记录qa队列的长度;
25     int countb = qb.size();       //用countb  记录qb队列的长度;
26      //分情况,注意最后到底是qa队列的数结尾还是qb队列的数结尾,这影响格式;
27     if(counta > countb *2)                            //counta大于两倍countb,是qa队列的元素结尾,则a最后一个元素后面不能加空格;
28     {
29             while(!qa.empty()||!qb.empty())      //当qa队列不空或者qb队列不空时;
30         {
31             if(!qa.empty())              //a队列不空;
32             {
33                tmp1 = qa.front();        //取出qa 队头的元素;
34                cout<<tmp1;              //输出qa队头的元素;
35                qa.pop();                 //将qa队头的元素去掉;
36                counta--;               //qa长度-1;
37                if(counta != 0)         //注意这里a最后一个元素后面不能加空格;
38                cout<<" ";
39                tmp1 = qa.front();          //再进行一遍上面的操作;
40                cout<<tmp1;
41                qa.pop();
42                counta--;
43                if(counta != 0)
44                cout<<" ";
45             }
46             if(!qb.empty())
47             {
48                 tmp2 = qb.front();          //取出qb 队头的元素;
49                 cout<<tmp2;                  //输出qb队头的元素;
50                 qb.pop();                     //将qb队头的元素去掉;
51                 cout<<" ";
52             }
53         }
54     }
55     else
56     if(counta <= countb *2)                         //counta小于等于两倍countb,是b队列的元素结尾,则b最后一个元素后面不能加空格;
57     {
58             while(!qa.empty()||!qb.empty())             //当qa队列不空或者qb队列不空时;
59         {
60             if(!qa.empty())                     //qa队列不空时;
61             {
62                tmp1 = qa.front();           //与上面的if类似,只是不需要注意尾部是否输出空格;
63                cout<<tmp1;
64                qa.pop();
65                cout<<" ";
66                tmp1 = qa.front();
67                cout<<tmp1;
68                qa.pop();
69                cout<<" ";
70             }
71             if(!qb.empty())
72             {
73                 tmp2 = qb.front();          //与上面的if类似,需要注意尾部是否输出空格;
74                 cout<<tmp2;
75                 qb.pop();
76                 countb--;
77                 if(countb != 0)
78                 {
79                      cout<<" ";
80                 }
81
82             }
83         }
84     }
85
86
87     return 0;
88 }

转载于:https://www.cnblogs.com/yewanting/p/10555154.html

(原创)7-1 银行业务队列简单模拟 (30 分)相关推荐

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

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  2. 银行业务队列简单模拟 (25 分)c语言c++

    7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...

  3. 7-45 银行业务队列简单模拟 (10 分)

    7-45 银行业务队列简单模拟 (10 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  4. 7-4 银行业务队列简单模拟 (15 分)

    ** 7-4 银行业务队列简单模拟 (15 分) ** 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客 ...

  5. 银行业务队列简单模拟Java程序设计_PTA 数据结构 银行业务队列简单模拟

    仅供参考,请勿粘贴 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完 ...

  6. PTA: 7-2 银行业务队列简单模拟 (25 分)

    大一下半期数据结构 数据结构题目集 7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客 ...

  7. 7-18 银行业务队列简单模拟

    7-18银行业务队列简单模拟 完整题目 **输入格式:** **输出格式:** **输入样例:** **输出样例:** **具体思路** **完整代码实现:** 我的一些问题 完整题目 设某银行有A. ...

  8. 7-1 银行业务队列简单模拟 (25 分)

    题目: 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出 ...

  9. 银行业务队列简单模拟(队列queue)

    设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列 ...

最新文章

  1. 【转载】SAP集成会计凭证生成的原理
  2. [SpringBoot2]原生组件注入_原生注解与Spring方式注入
  3. Tomacat服务器的安装和配置
  4. Windows句柄和指针的区别
  5. Redis的安装及原理介绍
  6. mapred.local.dir
  7. MySQL的InnoDB表如何设计主键索引-转自淘宝MySQL经典案例
  8. ASP.NET 如何在网页中获取根目录
  9. 如何在PHP7中安装mysql的扩展
  10. 理解Alpha-Beta 剪枝算法
  11. VMware 虚拟机Win10固定ip地址
  12. PHP_CodeSniffer的下载和使用
  13. 如何获取用户的微信openid
  14. snapchat中国使用_如何使用Snapchat:发送快照和消息的基础
  15. Mac Mini - 一个深坑
  16. Millet谷仓:区块链和电商的完美融合
  17. linux文件 含义,Linux各个文件及其含义
  18. 北邮信通导论第三单元智能温控风扇
  19. java内存分析工具_java内存查看与分析
  20. 面试题(一)- 谈谈你对数据库中索引的理解

热门文章

  1. 获得本页面URL地址
  2. monkeyrunner Can't open specified script file
  3. 救命,Linux正在吃掉我的内存!
  4. 一文读懂 Spring的前世今生
  5. 下一代微服务!ServiceMesh的2018年度总结 | 万字雄文
  6. Spring 原理初探——IoC、AOP
  7. Redis: 跳跃表
  8. t66y.buzz index.php,6.FizzBuzz
  9. jpa query 取数组第一个_数据结构基础-数组
  10. php mongo分页查询,PHP操作Mongodb之高级查询篇