用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();
}
class Ant{
//用来表示蚂蚁所在的位置
public int site = 0;
//用来表示蚂蚁的朝向,1表示向左,2表示向右
public int direct = 1;
//用来表示蚂蚁已经离开木杆
public boolean alreadyGone = false;
}
运行结果如下
木杆很细,不能同时通过一只蚂蚁。开始时。蚂蚁的头朝左还是朝右是任意的,它们只会朝前或掉头,但不会后退。
当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁每秒钟可以走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; } }
}
运行结果如下
相关文章推荐
- Java IO中的FileReader 和 FileWriter读写文件,和创建多级文件夹
- JAVA字典生成算法
- java的poi技术读取和写入excel
- spring scope prototype与singleton区别
- 【REST】REST、RESTFUL的理解以及SpringMVC实现Restful编程
- Java内存溢出及jvm内存设置
- 基于java的简单英雄联盟胜率计算
- Eclipse SVN修改用户名和密码
- 从”JAVA“而终 16:java sql学习资料大全
- java string
- java中的堆和栈
- 处理JSON的Java API :JSON的简介
- Spring的事务传播属性
- java源码分析04-FileInputStream
- Spring mvc 搭建与总结
- web项目在eclipse中服务器端无法识别
- Java 生成PDF方法总结
- java List 排序 Collections.sort()
- Eclipse使用git最基本流程
- spring mvc实现登录+异常