问题:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁头朝向任意(左或右),它们只会朝前或掉头,不会后退。当任意两只蚂蚁碰头是,两只蚂蚁会同时调头朝反向走。假设蚂蚁每秒走1厘米,编写程序,求所有蚂蚁都离开木杆的最短时间和最长时间。

解法一:

蛮力解法(brute force),枚举各蚂蚁的初始朝向,模拟每个蚂蚁的运动规律来解决。

解法二:

细心分析一下蚂蚁的运动及其行走的路径,可以得出一些有用的信息,例如两只蚂蚁A、B运动如下图所示:

A与B相遇,然后反向前进,最后A与B都离开了木杆,A总共走了6,B总共走了4。

若A与B相遇时,不是反向前进而是擦肩而过,继续前进,A走了5,B也走了5。

可以看出将“掉头走”看作“擦肩而过”,这样蚂蚁的运动就是独立的,其实A代替了B走,B代替了A走。

这样所有的蚂蚁运动轨迹可能与原来不同,但不影响所有蚂蚁离开木杆的最短时间和最长时间。

实现:

#include <iostream>
using namespace std;void CalcTime(double PoleLen,double *xPos,int AntNum,double speed,double &tMin,double &tMax)
{tMax=tMin=0;for(int i=0;i<AntNum;++i){double curMax=0;double curMin=0;if (xPos[i]>(PoleLen/2)){curMax=xPos[i];}else{curMax=(PoleLen-xPos[i]);}curMin = PoleLen - curMax;if (tMax < curMax){tMax = curMax;}if (tMin < curMin)  //注意这里是小于因为是所有蚂蚁最短时间,取最短中最大的
        {tMin = curMin;}}tMax/=speed;tMin/=speed;
}void main()
{double poleLength=27;double ants[5]={3,7,11,17,23};double speed=1;double timeMax,timeMin;CalcTime(poleLength,ants,5,speed,timeMin,timeMax);cout<<"MaxTime:"<<timeMax<<endl;cout<<"MinTime"<<timeMin<<endl;
}

MaxTime:24
MinTime11
请按任意键继续. . .

扩展问题:

1.第i只蚂蚁,什么时候走出木杆?

2.所有蚂蚁从一开始到全部离开木杆共碰撞了多少次?

参考资料:

http://lam8da.sinaapp.com/?p=11

转载于:https://www.cnblogs.com/Linkabox/p/3359828.html

编程之美 4.7蚂蚁爬杆相关推荐

  1. 蚂蚁爬杆 java_java蚂蚁爬杆

    import java.util.List; import java.util.ArrayList; import java.math.BigDecimal; /*-作者:volcano_hosan ...

  2. 趣味题_蚂蚁爬杆_猴子分桃

    题一: 有些蚂蚁在一条水平线上走动,每只蚂蚁的速率都是1cm/s. 当一只蚂蚁走到水平线的任何一个端点时,它都会立刻掉下来. 当两只蚂蚁碰到一起时他们都会立刻调头向相反方向移动. 我们知道蚂蚁们在水平 ...

  3. 《编程之美》蚂蚁爬杆问题的扩展【1】

    有一根长为L的平行于x轴的细木杆,其左端点的x坐标为0(故右端点的x坐标为L).刚开始时,上面有N只蚂蚁,第i(1≤i≤N)只蚂蚁的横坐标为xi(假设xi已经按照递增顺序排列),方向为di(0表示向左 ...

  4. 编程之美-蚂蚁爬杆方法整理

    [试题描述] 方法一: 方法二:

  5. 和吴昊一起玩推理 Round 2 —— 蚂蚁爬杆问题

    Problem:有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米,这五个位置上各有一只蚂 蚁,木杆很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还是右是任意的,他们只会朝 ...

  6. php 路径算法,PHP实现的蚂蚁爬杆路径算法代码

    /** * 有一根27厘米的细木杆,在第3厘米.7厘米.11厘米.17厘米.23厘米这五个位置上各有一只蚂蚁. * 木杆很细,不能同时通过一只蚂蚁.开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前 ...

  7. 蚂蚁爬杆问题php,PHP实现的蚂蚁爬杆路径算法代码_php技巧

    $i) { // 超出计算范围 return $directionArr; } if(0 == $directionArr[$i]) { // 当前位加1 $directionArr[$i] = 1; ...

  8. 精选的一些《编程之美》相关资料

    又要到一年的招聘季了,肯定又有很多人开始啃<编程之美>了吧.这本书从开阔视野的角度来说很好,不过限于篇幅,有的问题并没有讲清楚(甚至问题叙述模棱两可.被标榜为"鼓励同面试官交流以 ...

  9. 《编程之美》相关参考资料

    转载自:https://blog.csdn.net/wuyuegb2312/article/details/9896831 为了便于查阅,也为了方便后人不必在搜索上浪费时间,我把比较有价值的文章的链接 ...

  10. [读书笔记]编程之美(三)

    [读书笔记]编程之美(三) 3.1字符串移位包含的问题 问题:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含.例如,给定s1=AABCD和s2=CDAA ...

最新文章

  1. 数据研发岗位需要技能
  2. oracle表决盘奇数,Oracle 的OCR,表决盘与ASM SPFILE恢复方法
  3. 解决java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor问题
  4. mysql与mangodb多租户_MongoDB多租户(Java):如何使用MongoClient在运行时切换具有不同数据库凭据的MongoDB数据库?...
  5. 用 Kaggle 经典案例教你用 CNN 做图像分类!
  6. solaris下修改 IPMP 配置
  7. 卸载Oracle数据库(有图有真相)
  8. 再读《SAP德国造》
  9. 掌门教育微服务体系 Solar(下)
  10. 如何将自制的live2d模型上传至facerig创意工坊使得别人可以下载
  11. 阿里云智能巡检管家使用攻略及功能示例
  12. 华为2017年8月30日校招编程真题01-数字的中文拼音和英文单词之间互相转换
  13. C# Panel半透明
  14. IDF实验室之牛刀小试
  15. 获取linux时间 毫秒级,Linux获取毫秒级时间
  16. 【盛天体育出品】天津仁爱学院“彩虹”运动场来了
  17. HTML5七夕情人节表白网页(蓝色背景3D相册) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心
  18. python实现excel计算_用python实现简单EXCEL数据统计的实例
  19. 通过windows官网工具制作win10启动盘并安装win10系统
  20. 图论典型问题--握手定理

热门文章

  1. 两个pv挂一个vg_今日德杯:VG、TES零封对手会师四强;FOFO状态爆表台湾网友热议:Maple比Fofo混得差;管泽元:牛宝快跑...
  2. 日语输入法电脑版_哪个日语输入法比较好用,日语输入法下载及使用教程
  3. java mybatis sql server未返回响应。连接已关闭
  4. 【渝粤教育】国家开放大学2018年秋季 0689-22T老年心理健康 参考试题
  5. 【渝粤教育】国家开放大学2018年春季 8618-22T燃气行业规范 参考试题
  6. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料
  7. 深度优先遍历(DFS)例题
  8. Rabbit MQ 安装
  9. fiddler 使用
  10. 连续区间(数据岛)查询