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

题目:

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

代码:

#include <bits/stdc++.h>
using namespace std;
/*
【算法描述】
1、创建两个队列A和B,标记性变量flag的初值为0; 
2、把奇数压入A队列,把偶数压入B队列
3、当A或B非空时,A先出队,标记性变量flag的值加1;
   当flag%2==0时,B出队,把出队顺序写进一个数组里 
4、当A、B其中一个队列空时,把另一个还在队列中的数依次输入数组
5、输出所有数组的元素 
*/
int main()
{
	queue<int> A;
	queue<int> B;
	queue<int> out;
	int n,num;
	cin>>n;
	while(n--)
	{
		cin>>num;
		if(num%2!=0) A.push(num);
		else B.push(num);
	}
	int flag=0;
	while((!A.empty())&&(!B.empty())) 
	{
		if((flag%2==0)&&((flag!=0)))
		{
			out.push(B.front());
			B.pop();
			flag=0;
		}
		else
		{
			out.push(A.front());
			A.pop();
			flag++;
		}
	}
	while(!A.empty())
	{
		out.push(A.front());
		A.pop(); 
	}
	while(!B.empty())
	{
		out.push(B.front());
		B.pop();
	}
	cout<<out.front();
	out.pop();
	while(!out.empty())
	{
		cout<<" "<<out.front();
		out.pop();
	}
	
}

测试点:

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要求: 客户业务为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果居于第一种,且申请额超出银行现存资金总额顺得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查相处理(如果可能)第二个队列中的客广,对能满足的申请者予以满足,不能满足者重新排列第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止被盗(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有存户立即离开银行。 写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平 均时间。 [测试数据] 一天营业开始时银行拥有的款额为10000(元).营业时间为600(钟)。其他模拟参量 自定。注意测定两种极端的情况:一是两个到达事件之间的间隔时间很短,而客户的交易时 间很长,另一个恰好相反,设置两个到达事件的间隔时间很长,而客户的交易时间很短。 [实现提示] 事件有两类;到达银行和离开银行。韧始时银行现存资金总额为total。开始营业后的第 —个事件是客户到达,营业时间从0到closetime。到达事件发生时随机地设置此客户的交 易时间相距下一到达事件之间的时间间隔。每个客户要办理的款额也是随机确定的,用负值 和正值别表示第一类相第二类业务。变量total、closetime以及上述两个随机量的上下界 均文互地从终端读入,作为模拟参数。 两个队列和一个事件表均要用动态存储结构实现。注意弄清应该在什么条件下设置离开事件,以及第二个队列甩怎样的存储结构实现时可以获得较高的效率。注意:事件表是按 时间顺序有序的。
### 回答1: 这道题目要求我们模拟银行业务队列,具体来说,就是模拟银行柜台的服务过程。我们需要考虑到不同的业务类型,以及不同的客户到达时间和服务时间。我们可以使用队列来模拟客户的排队过程,每个客户进入队列后,按照先来先服务的原则进行服务。当柜台空闲时,队列中的第一个客户就可以进行服务,直到服务完成后,客户离开队列,柜台重新变为空闲状态。 为了实现这个模拟过程,我们需要定义一个客户类,包含客户到达时间、服务时间和业务类型等属性。然后,我们可以使用一个队列来存储客户,每当有客户到达时,就将其加入队列中。同时,我们需要定义一个计时器,来记录当前时间,以便判断客户是否已经到达或者服务已经完成。当柜台空闲时,我们就从队列中取出第一个客户进行服务,直到服务完成后,客户离开队列,柜台重新变为空闲状态。 在模拟过程中,我们需要注意一些细节问题,比如客户到达时间和服务时间的随机性,以及不同业务类型的处理方式等。同时,我们还需要输出一些统计信息,比如客户平均等待时间和柜台利用率等,以便评估银行的服务质量。 ### 回答2: 本题需要模拟银行业务队列的过程,银行业务队列通常包括取款、存款、转账等多种业务,需要对用户的需求进行管理和排序,以确保业务处理的效率。 首先,我们需要定义一个队列,以存储用户在银行中的需求,并对队列中的需求进行操作和排队。我们可以使用数组或链表作为队列数据结构,具体实现方式可根据实际情况选择。 在模拟银行业务队列时,需要考虑到以下几点: 1. 用户的需求种类及优先级。不同的需求拥有不同的优先级,例如,取款的优先级通常比查询账户余额的优先级高,所以在队列中应该优先处理取款的需求。 2. 队列的推进和弹出操作。在队列中,每当有用户的需求得到满足时,我们需要将队列中的元素向前推进,将下一个需求变为队首元素。同时,需要弹出已经处理完毕的需求,使队列长度减小。这一过程可以通过队列的出队(pop)和入队(push)实现。 3. 用户等待的时间。为了模拟真实的银行业务队列,我们需要记录每个用户在队列中等待的时间,并统计各种需求的平均等待时间。这可以通过记录每个用户的到达时间和完成时间来实现。 在代码实现上,我们可以用一个结构体来表示每个用户的需求和等待时间,然后将它们放入队列中。在每个时间片中,我们需要检查当前队列中的用户需求,并按照优先级处理。同时,还需要更新队列中各个用户的等待时间。当队列为空时,模拟结束,输出各种需求的平均等待时间即可。 总之,模拟银行业务队列需要考虑多个方面的因素,并依据实际需求进行适当的调整和优化。这一过程可以帮助我们更好地理解和掌握队列的概念和应用。 ### 回答3: 本题要求我们使用队列来模拟银行业务的排队与服务过程。具体来说,每个客户会进行某些银行业务(如存款、取款、转账等),我们需要根据客户需求模拟出等待队列、服务队列等环节。 首先,我们需要定义一个队列数据结构来存储等待队列和服务队列中的客户。在考虑队列的实现时,我们可以使用数组或链表来实现。其中,数组实现的队列需要考虑队列的扩容和缩容问题,而链表实现的队列则可以动态扩展和缩减队列长度。由于每个客户需要存储多个属性(如姓名、银行卡号、所需业务等),因此可以定义一个Customer类来描述客户的基本信息和所需服务的银行业务。 其次,我们需要定义一个服务窗口的数量。每个窗口可以同时为一名客户提供服务,因此可以定义一个窗口队列(即服务队列)来存储当前正在执行业务的客户。在客户完成当前业务后,该窗口将被配给等待队列中的下一位客户。需要注意的是,当等待队列中没有客户时,窗口需要继续等待客户到来。 在模拟过程中,我们需要动态记录客户的到达时间、等待时间、服务开始时间等信息,并根据实际业务流程更新这些信息。具体来说,当客户到达银行时,我们需要将其添加到等待队列中,并记录其到达时间;当客户从等待队列进入服务队列时,我们需要记录其进入服务队列的时间;当客户完成当前业务时,我们需要记录其完成时间和等待时间,并将该客户从服务队列中移除;当服务队列中的窗口空闲时,我们需要从等待队列中选取下一位客户进行服务。 最后,在模拟过程中,我们需要根据特定的顺序来处理等待队列中的客户。一般来说,可以根据客户到达时间的先后顺序来处理队列中的客户,也可以根据客户所需服务的时间长短来进行处理,具体要考虑业务的复杂度和实现难度。另外,需要注意的是,在队列模拟过程中,我们需要根据实际业务需求进行处理,例如禁止客户插队或修改等待队列中客户的顺序,避免模拟结果与实际情况不符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值