4.7 蚂蚁爬杆

题目:有一根树枝,树枝很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。

   当两只蚂蚁碰头时,它们会同时调头朝反方向走。

   求所有蚂蚁都离开木杆的最短时间和最长时间。


思想:虽然两只蚂蚁相遇后是调头往反方向走,但是,可以“看作”两个蚂蚁相遇后,擦身而过。

   也就是说,可以认为蚂蚁的运动是独立的,是否碰头并不是重点。

   所以,程序只需要遍历所有的蚂蚁,把每个蚂蚁走出木杆的最长时间(蚂蚁向离自己较远的一端走去),最短时间(蚂蚁向离自己较近的一端走去)分别求出来。结果就是所有蚂蚁离开木杆的最短时间和最长时间。


代码:

void CalcTime(int length, double *xPos, int antNum, double speed, double &Max, double &Min) {
    double totalTime = length / speed;
    Max = 0;
    Min = totalTime;
    for(int i = 0; i < antNum; ++i) {
        double currentMax = 0;
        double currentMin = 0;
        if(xPos[i] > (length / 2)) {
            currentMax = xPos[i] / speed;
        } else {
            currentMax = (length - xPos[i]) / speed;
        }
        currentMin = totalTime - Max;
        if(currentMax > Max) Max = currentMax;
        if(currentMin < Min) Min = currentMin;
    }
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值