zoukankan      html  css  js  c++  java
  • 面试题:蚂蚁爬杆

    Question有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过一只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

    最小时间肯定大家都很容易就想到了, 就是蚂蚁们分别向左或向右走, 其中在11厘米处的蚂蚁应该向左走比较近, 所以最小时间就是中间的蚂蚁向0处走出杆的时间, 也就是11秒.

    求最大时间呢? 穷举所有情况, 然后编程模拟么? 虽然一共只有2的5次方也就是32种情况, 编程模拟也不是很麻烦~ 但其实有个更简单的方法完全不需要编程就可以得出:
    假设蚂蚁走路能够穿人(哦不, 是穿蚁), 当它们碰头时虽然题目里说是分别掉头, 但我们可以看成它们只是穿过了对方的身体而继续往前走, 要求最大时间也就是找到那个走出杆最久的蚂蚁, 很显然是3厘米的蚂蚁往右走(也就是木杆27厘米处), 时间为24秒.
  • 相关阅读:
    EF Core使用笔记(基于MySql数据库)
    开发环境---->服务器(数据库迁移Migration)
    正向代理和反向代理
    Linux基础命令
    Git + Docker + Jenkins自动化部署web到Linux(Centos)
    poj3320(尺取法)
    poj3061(尺取法)
    51nod 1092(lcs)回文字符串
    51nod1268(基础dfs)
    51nod-1459-迷宫游戏
  • 原文地址:https://www.cnblogs.com/Dah/p/566140.html
Copyright © 2011-2022 走看看