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

简介: 7-1 银行业务队列简单模拟

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


设某银行有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


解题思路


根据题意A输出两次B输出一次,A输出奇数,B输出偶数,A与B同时处理完毕时,A优先输出。


将奇数存入一个队列,偶数存入一个队列,A处理奇数,B处理偶数,输出两次A,输出一次B的顺序进行输出。按照顺序为AABAABAABAAB….


编写队列类。声明两个队列A、B、C,读入编号,奇数编号压入队列A中,偶数编号压入队列B中。最后对两队列按照上述思路依次进行出队操作


代码


#include <stdio.h>
#include <queue>
#include <iostream>
using namespace std;
#define MAXSIZE 1000
typedef struct
{
  int *date;
  int front;
  int rear;
} SqQueue;
// 初始化队列
int CreateQueue(SqQueue &Q)
{
  Q.date = new int[MAXSIZE];
  if (!Q.date)
    return 0;
  Q.front = Q.rear = 0;
  return 1;
}
// 入队
int Push(SqQueue &Q, int m_date)
{
  if ((Q.rear + 1) % MAXSIZE == Q.front)
    return 0;
  Q.date[Q.rear] = m_date;
  Q.rear = (Q.rear + 1) % MAXSIZE;
}
// 出队
int Pop(SqQueue &Q, int &e)
{
  if (Q.front == Q.rear)
    return 0;
  e = Q.date[Q.front];
  Q.front = (Q.front + 1) % MAXSIZE;
  return 1;
}
int main()
{
  SqQueue A, B;
  CreateQueue(A);// A窗口办理的用户
  CreateQueue(B);//B窗口办理的用户
  int n;
  cin >> n;
  int result[MAXSIZE];// 用于存储输出结果
  int m_date, i = 0;;
  for (i = 0; i < n; i++)
  {
    cin >> m_date;
    if (m_date % 2 != 0)
      Push(A, m_date);
    else
      Push(B, m_date);
  }
  i = 0;
  while ((A.front != A.rear) && (B.front != B.rear))  //既又A又有B  输出两个A 一个B
  {
    Pop(A, result[i]);
    i++;
    Pop(A, result[i]);
    i++;
    Pop(B, result[i]);
    i++;
  }
  while (A.front != A.rear)// 没B了 光输出A
  {
    Pop(A, result[i]);
    i++;
  }
  while (B.front != B.rear)// 没A了 光输出B
  {
    Pop(B, result[i]);
    i++;
  }
  for (i = 0; i < n - 1; i++)
  {
    printf("%d ", result[i]);
  }
  printf("%d", result[n - 1]);
  getchar();
  getchar();
  return 0;
}
相关文章
|
10天前
|
安全 Java 编译器
【JavaEE】——阻塞队列,生产消费者模型(较难)
阻塞队列,生产消费者模型,分布式,自己实现一个阻塞队列,阻塞队列带来的多线程安全问题(wait唤醒问题)
【JavaEE】——阻塞队列,生产消费者模型(较难)
|
5月前
|
安全 Java
Java模拟生产者-消费者问题。生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存
该博客文章通过Java代码示例演示了生产者-消费者问题,其中生产者在仓库未满时生产产品,消费者在仓库有产品时消费产品,通过同步机制确保多线程环境下的线程安全和有效通信。
|
7月前
|
消息中间件 缓存 Java
避免消息积压的终极指南:四个关键技巧
本文作者小米分享了避免消息积压的四个策略:1) 提高消费并行度,可通过增加消费者实例和利用分区机制;2) 批量消费,利用消息中间件的批量API或自定义批量处理逻辑;3) 减少组件IO交互次数,如使用本地缓存和合并IO操作;4) 优先级消费,设置消息优先级并使用优先级队列。通过这些方法,可以优化消息处理效率,防止消息积压,确保关键业务的顺利进行。
95 5
|
8月前
|
人工智能 自然语言处理 5G
把大模型塞进终端,能让消费电子市场回暖吗?
“大模型”对于消费电子的影响到底有多大,能否改变长期低迷的市场现状?目前来看还有不少待解的问题。
|
测试技术
餐厅【候桌问题】(链表模拟队列)
餐厅【候桌问题】(链表模拟队列)
75 0
如何实现每天定时给女友/老婆发消息
如何实现每天定时给女友/老婆发消息
|
Java
java数据结构31:银行业务队列简单模拟
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍---即当A窗口处理完2个顾客时,B窗口处理完一个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
228 0
|
算法 前端开发 JavaScript
不逼自己一把都不知道自己还能这么优秀(小鹅通学习记录大批量队列同步)
不逼自己一把都不知道自己还能这么优秀(小鹅通学习记录大批量队列同步)
165 0
银行排队问题之单队列多窗口服务
银行排队问题之单队列多窗口服务
345 0
银行排队问题之单队列多窗口服务
|
消息中间件 NoSQL Kafka