一个超牛的程序设计题,请帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/30 11:38:22
有一根长27厘米的小木棍儿,在木棍儿的3厘米,7厘米,11厘米,17厘米,23厘米的地方各有一只蚂蚁。这5只蚂蚁的走向是不知道的,假设小木棍儿很细只能通过一只蚂蚁。蚂蚁只能往前走或者掉头,不能后退(也就是不能倒着走)!当任意两只蚂蚁碰头的时候会同时掉头朝反方向走。假设蚂蚁一秒钟能走一厘米,求蚂蚁全部离开木棍儿的最小和最大时间。用程序设计出来,可以只写思路!

共有五只蚂蚁,每只蚂蚁开始只有正、反向两种状态,意思说只有2^5=32种状态,只要把这32种状态都试完了,最大最小时间也就出来了。

可以建立Ant类
public class Ant {
int position;
boolean direction;
}
position 取值范围 0~27代表在木棍上的位置。
direction 代表现在的行进方向,true为正向,false为反向。

可用一个五重for循环,每重循环两次,使direction的初始值不一样。

在在五重循环最内层,用一个while(true)循环来移动蚂蚁,包含一个初始值为0的计数器。每次循环根据每只蚂蚁direction值来进行移动(position加减1操作),计数器加1,之后判断又没有出现position相同的蚂蚁。如果有,更改direction的值。还需要一个条件语句来判断position是否大于27或小于0,是的话就不再移动。重复直到所有position均大于27或小于0,break这个while(true)循环。得到计数器的值则为这次所需时间。

可以把这个时间存在一个ArrayList<Integer>内,循环完32次之后,就得到每次所用的时间,调用ArrayList的sort()方法排序后,就可以得到最短和最长的时间

怎么看着都像是微软技术面试心得上的题。。。
书不在我手边
放公司了
蚂蚁掉头的情况跟没掉头是一样的。。。

一共两个类,具体思路看我的注释吧,应该够详细了:蚂蚁类定义数据结构,蚂蚁移动类则是具体的走法的输出

蚂蚁类:

public class Ant {
private int direction;
private int position;
/*
* 初始化蚂蚁的位置
*/
public Ant(int position){
this.position=position;
}
public int