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

有一根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;
}
}

}
运行结果如下
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值