C++ 代码解析:模拟银行排队系统
这是一个模拟银行排队系统的 C++ 代码。代码中,'A_arrive_time' 表示 A 客户到达的时间,'B_arrive_time' 表示 B 客户到达的时间,'A_set_time' 表示 A 客户完成业务离开的时间,'B_set_time' 表示 B 客户完成业务离开的时间。'a'、'b'、'Line_A'、'Line_B' 分别表示 A、B 两个窗口的状态和 A、B 两个队列中的人数。
以下是对每个函数的详细解释:
-
'A_set()': 表示 A 窗口完成一次业务,将 'Line_A' 减 1,'a' 加 1。
-
'B_set()': 表示 B 窗口完成一次业务,将 'Line_B' 减 1,'b' 加 1。
-
'A_arrive()': 表示 A 客户到达,如果 B 队列中有人,则将 'Line_B' 减 1,'a' 加 1。
-
'B_arrive()': 表示 B 客户到达,如果 A 队列中有人,则将 'Line_A' 减 1,'b' 加 1。
-
'A_prepare_time()': 将 A 客户到达时间进行处理,加上 140 分钟(表示银行开门时间),如果分钟数大于等于 60,则小时数加 1,分钟数减去 60。
-
'B_prepare_time()': 将 B 客户到达时间进行处理,加上 140 分钟,处理方式与 'A_prepare_time()' 相同。
-
'main()' 函数:按照时间顺序模拟整个银行的运营过程,对每个时间点进行判断,如果有客户到达则加入相应的队列,如果有窗口空闲则进行业务操作。最后输出所有客户和队列中的人数之和。
#include<bits/stdc++.h>
using namespace std;
int A_arrive_time[15]={1830,2200,120,210,440,700,1000,1200,1430,1630},
B_arrive_time[15]={350,720,930,1230,1450,1800,2230,50},
A_set_time[15]={1820,2120,2330,330,520,830,1230,1550},
B_set_time[15]={900,1200,1420,1600,1840,2130,30,330,500,700};
int a=0,b=0,Line_A=0,Line_B=0;
void A_set()
{
if(!a) a++;
Line_A++;
a--;
return;
}
void B_set()
{
if(!b) b++;
Line_B++;
b--;
return;
}
void A_arrive()
{
if(Line_B)
{
Line_B--;
a++;
}
return;
}
void B_arrive()
{
if(Line_A)
{
Line_A--;
b++;
}
return;
}
void A_prepare_time()
{
for(int m=0;m<10;m++)
{
int x,y;
x=(A_arrive_time[m]+140)/100;
y=(A_arrive_time[m]+140)%100;
if(y>=60)
{
y-=60;
x++;
}
A_arrive_time[m]=x*100+y;
}
return;
}
void B_prepare_time()
{
for(int m=0;m<8;m++)
{
int x,y;
x=(B_arrive_time[m]+140)/100;
y=(B_arrive_time[m]+140)%100;
if(y>=60)
{
y-=60;
x++;
}
B_arrive_time[m]=x*100+y;
}
return;
}
int main()
{
A_prepare_time();
B_prepare_time();
for(int i=0;i<=23;i++)
for(int j=0;j<=50;j=j+10)
{
int t=i*100+j;
for(int m=0;m<10;m++) if(A_arrive_time[m]==t) A_arrive();
for(int m=0;m<8;m++) if(B_arrive_time[m]==t) B_arrive();
for(int m=0;m<8;m++) if(A_set_time[m]==t) A_set();
for(int m=0;m<10;m++) if(B_set_time[m]==t) B_set();
}
cout<<a+b+Line_A+Line_B;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/mHfA 著作权归作者所有。请勿转载和采集!