已经给出确定数值了,没戏要那么麻烦吧...
- namespace _蚂蚁爬杆问题
- {
- class Program
- {
- /// <summary>
- ///有一根27厘米长的细木杆,在第3厘米,7厘米,11厘米,17厘米,23厘米这五个位置上各有一只蚂蚁。
- ///他们只会朝前走或掉头,但不会后退。木杆很细,不能允许两只蚂蚁同时通过。
- ///当两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走。假设蚂蚁们每秒钟可以走1厘米的距离。
- ///开始时,蚂蚁的头朝向左还是右是任意的。求所有蚂蚁都离开木杆的最小时间和最大时间。
- /// </summary>
- /// <param name="args"></param>
- static void Main(string[] args)
- {
- //不难观察.3,7,11,17,23均为奇数,其两两相差均为偶数.
- //所以使用的数据类型只需使用int即可.
- //定义木杆的总长度
- int total=27;
- //定义至左至右每一只蚂蚁所在的位置
- int first=3;
- int second=7;
- int third=11;
- int fourth=17;
- int fifth=23;
- //计算最小时间
- //不难看出,3,7,11,17,23均为质数.所以蚂蚁走过的最小时间,即为蚂蚁之间相遇次数为0时.
- //所以蚂蚁离开的最小时间就是第三只蚂蚁离开木杆的最小时间.
- //[蚂蚁们每秒钟可以走1厘米的距离。]即蚂蚁爬过的距离与时间相等.
- //(很明显可以看出是第三只,想排一下其他四只也无所谓.)
- int min=Math.Min(third,total-third);
- Console.WriteLine("蚂蚁离开木杆的最小时间为{0}秒.",min);
- //计算最大时间
- //[木杆很细,不能允许两只蚂蚁同时通过。当两只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走。]
- //可以这样想,如果不考虑木杆的宽度与蚂蚁的身份,两只蚂蚁相遇后掉头与继续向前爬没有区别.
- //因为蚂蚁的长度不再考虑范围之内,就当它们相遇后会灵魂交换,该向左还向左,该向右还向右.
- //所以,最大时间即为[五只蚂蚁一直爬(不掉头)]最后一只蚂蚁离开木杆的时间.
- //先求每一只蚂蚁离开木杆的最大时间
- first = Math.Max(first, total - first);
- second = Math.Max(second, total - second);
- third = Math.Max(third, total - third);
- fourth = Math.Max(fourth, total - fourth);
- fifth = Math.Max(fifth, total - fifth);
- //求出5数中最大的值,就是最大的时间.不想用别的方法了,数也不多,无脑排吧.
- int max1 = Math.Max(first, second);
- int max2 = Math.Max(third, fourth);
- int max = Math.Max(max1, max2);
- max = Math.Max(max, fifth);
- Console.WriteLine("蚂蚁离开木杆的最大时间为{0}秒.", max);
- Console.ReadKey();
- }
- }
- }
复制代码 |