银行取款排队模拟 假设银行有4个柜台,假设某天有200位客户来办理业务,每个客户到达银行的时间和业务处理时间分别用两个数组arrive_time 和 process_time 来描述。 请写程序计算所有客户的平均等待时间,假设每个客户在去到营业部之后先拿号排队,然后在任意一个柜台有空闲的时候,号码数最小的客户上去办理,假设所有的客户拿到号码之后不会因为银行众所周知的慢而失去耐心走掉。
首先定义一个类,来描述柜台
class counter:NSObject
{
var sum = 0.0 //柜台总共耗时多少,耗时最少的将迎接下一位客人
var sunTime = 0.0 //等待时间
var lastArrival = 0.0 //上一个客人来店的时间
var timeConsuming = 0.0 //上一个客人需要办理的时间
}
接下来我们New 4个柜台, c1、c2、c3、c4
var c1 = counter()
var c2 = counter()
var c3 = counter()
var c4 = counter()
let arrive_time = [1.0,2.0,3.0,4.0,4.0,8.0]
let process_time = [50.0,20.0,11.0,25.0,30.0,40.0]
for i in 0..<arrive_time.count
{
// 哪个柜台将要结束
let px = getNextCounter()
if i > 3
{
//等待时间 = 上一个客人耗时 加上当前客人和上一个客人到银行的时间差
px.sunTime += px.timeConsuming + px.lastArrival - arrive_time[i]
}
//记录总耗时,这个值决定哪个柜台先办完
px.sum += process_time[i]
//记录客人到银行时间
px.lastArrival = arrive_time[i]
//记录客人办理业务的时间
px.timeConsuming = process_time[i]
}
print("总共等待时间: \(c1.sunTime + c2.sunTime + c3.sunTime + c4.sunTime)")
写一个func,看哪个柜台最早结束
//哪个柜台将要结束
func getNextCounter() -> counter
{
var px = c1
if px.sum > c2.sum
{
px = c2
}
if px.sum > c3.sum
{
px = c3
}
if px.sum > c4.sum
{
px = c4
}
return px
}
输出结果:24.0