您的位置:首页 > 编程语言 > Java开发

用java编写的五只蚂蚁走出27厘米长的细目干的最大最小时间

2015-11-10 16:48 369 查看
有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。

木杆很细,不能同时通过一只蚂蚁。开始时。蚂蚁的头朝左还是朝右是任意的,它们只会朝前或掉头,但不会后退。

当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁每秒钟可以走1厘米的距离。

编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

编写的程序如下:

public class MaYi{

public static void main(String[] args){

MaYi t = new MaYi();

t.t1();

}

public void t1(){

//初始化五只小蚂蚁

Ant a1 = new Ant();

Ant a2 = new Ant();

Ant a3 = new Ant();

Ant a4 = new Ant();

Ant a5 = new Ant();

//因为每只蚂蚁的朝向随意,所以有2的5次方可能,所以要5个循环
for(int i1=1;i1<=2;i1++){
for(int i2=1;i2<=2;i2++){
for(int i3=1;i3<=2;i3++){
for(int i4=1;i4<=2;i4++){
for(int i5=1;i5<=2;i5++){
//做蚂蚁的初始化
a1.direct = i1;
a1.site = 3;
a1.alreadyGone = false;
a2.direct = i2;
a2.site = 7;
a2.alreadyGone = false;
a3.direct = i3;
a3.site = 11;
a3.alreadyGone = false;
a4.direct = i4;
a4.site = 17;
a4.alreadyGone = false;
a5.direct = i5;
a5.site = 23;
a5.alreadyGone = false;

for(int j=1;j<1000;j++){
//1:让蚂蚁走,每次走一步,只有蚂蚁没有离开才能走,所以需要一个判断条件if
if(!a1.alreadyGone){
a1.step();
}
if(!a2.alreadyGone){
a2.step();
}
if(!a3.alreadyGone){
a3.step();
}
if(!a4.alreadyGone){
a4.step();
}
if(!a5.alreadyGone){
a5.step();
}
//2:判断两只蚂蚁是否会碰头,碰头就掉头
if(a1.site==a2.site&&a1.direct==2&&a2.direct==1){
a1.changeDirect();
a2.changeDirect();
}
if(a2.site==a3.site&&a2.direct==2&&a3.direct==1){
a2.changeDirect();
a3.changeDirect();
}
if(a3.site==a4.site&&a3.direct==2&&a4.direct==1){
a3.changeDirect();
a4.changeDirect();
}
if(a4.site==a5.site&&a4.direct==2&&a5.direct==1){
a4.changeDirect();
a5.changeDirect();
}
//3:判断是否已经全部离开
if(a1.alreadyGone&&a2.alreadyGone&&a3.alreadyGone&&a4.alreadyGone&&a5.alreadyGone){
System.out.println("Over==="+j);
break;
}
}

}
}
}
}
}
}


}

class Ant{

//用来表示蚂蚁所在的位置

public int site = 0;

//用来表示蚂蚁的朝向,1表示向左,2表示向右

public int direct = 1;

//用来表示蚂蚁已经离开木杆

public boolean alreadyGone = false;

//表示蚂蚁的一个功能:走路
public void step(){
if(direct==1){
site = site - 1;
}else{
site = site +1;
}
if(site==0||site==27){
alreadyGone = true;
}
}

//表示蚂蚁的另一个功能:掉头
public void changeDirect(){
if(direct==1){
direct = 2;
}   else{
direct = 1;
}
}


}

运行结果如下

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: