[Swift 开发] 银行取款排队模拟

银行取款排队模拟 假设银行有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值