蚂蚁爬行问题
题目描述如下:
1、有一根100厘米的细木杆,在第15厘米、20厘米、25厘米、38厘米、42厘米、50厘米这六个位置上各有一只蚂蚁。
2、木杆很细,不能同时通过两只蚂蚁。
3、开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。
4、当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。
5、假设蚂蚁们每秒钟可以走一厘米的距离。
编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。
解题思路:
初次看到这道题,一定会觉得非常复杂。但是仔细想想看,两只蚂蚁相撞,它们会同时掉头朝反向走。例如A和B相遇(相撞),现在A掉头反向走,B也掉头反向走。假设现在把A看作是B,而B看做是A,其实他们的速度都是相同的,相当于把他们做一个交换也无妨。这也就相当于和A与B其实是没有关系的。
关于最短时间:
位于细木杆中间的那只蚂蚁到达某一端的最小时间。
关于最长时间:
所以最长的时间为左端的蚂蚁到右端的时间和右端的蚂蚁到左端的时间两者中的最大值。
所以本题给出的数据分析结果为:最短时间为:50;最长时间为:85
算法设计:
//输入参数l为细木杆的长度;x[]数组为蚂蚁的位置
public static void solve(int l, int x[]) {
if (0 >= x.length)
return;
int min, max;
min = max =