码迷,mamicode.com
首页 > 编程语言 > 详细

蚂蚁爬杆问题(Java面向对象)

时间:2015-04-14 19:43:52      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:java   面向对象 蚂蚁爬杆问题   

有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、18厘米、23厘米这五个位置上各有一只蚂蚁。木杆很细,不能同时通过两只蚂蚁。开始时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。编写程序,求所有蚂蚁都离开木杆的最小时间和最大时间。

   要求:用类模拟出蚂蚁的行为特性,进而模拟出五只蚂蚁在木杆上的运行过程来编程求解。不能通过数学的方式直接用公式计算。

解题思路:

           把每个蚂蚁当作一个对象操作,有pos(位置)、direction(走向)、state(状态)属性,只需要在蚂蚁移动的过程中,每移动一次就判断是否走出了杆的长度(0~27),如果走出了范围,马上改变蚂蚁的状态;判断是否有蚂蚁碰面了,如果有碰面,就马上改变蚂蚁的走向。记录时间,输出最大的和最小的。

代码实现:

class Main{
   public static void main(String args[]){
       int min=999,max=-999;
       for(int i=0;i<=1;i++){                 //利用五个for来改变蚂蚁的初始走向
       	for(int j=0;j<=1;j++){
       		for(int k=0;k<=1;k++){
       			for(int m=0;m<=1;m++){
       				for(int n=0;n<=1;n++){				
					       Ant a=new Ant(3);            //a蚂蚁放在3cm处
					       Ant b=new Ant(7);            //b蚂蚁放在7cm处
					       Ant c=new Ant(11);           //c蚂蚁放在11cm处
					       Ant d=new Ant(18);           //d蚂蚁放在18cm处
					       Ant e=new Ant(23);           //e蚂蚁放在23cm处
				         a.direction=i;
					       b.direction=j;
					       c.direction=k;
					       d.direction=m;
					       e.direction=n;
					       for(int l=0;;l++){
					         a.move();
					         b.move(); 
					         c.move();
					         d.move();
					         e.move();
					         if(a.pos==b.pos){                  //如果有蚂蚁碰面马上改变这两只蚂蚁走向
					         	a.direction*=-1;b.direction*=-1;
					        }
					        if(b.pos==c.pos){
					        	b.direction*=-1;c.direction*=-1;
					        }
					        if(c.pos==d.pos){
					        	c.direction*=-1;d.direction*=-1;
					        }
					        if(d.pos==e.pos){
					        	d.direction*=-1;e.direction*=-1;
					        }
					        // System.out.println(a.state+" "+b.state+" "+c.state+" "+d.state);
					         if((a.state+b.state+c.state+d.state+e.state)==5){          //如果每个蚂蚁的state都是1,说明全部走出了杆的长度
					         	 if(l>max){
					         	 	max=l;
					         	}
					         	if(l<min){
					         		min=l;
					         	}
					         	//System.out.println(i+" "+j+" "+k+" "+m+" "+n);
					         	//System.out.println(l);
					         	break;
					        }
					      }
					    }
       			}
       		}
       	}
      }
      System.out.println("所有蚂蚁掉下去最小时间是:"+min);
      System.out.println("所有蚂蚁掉下去最大时间是:"+max);
   }
} 
class Ant{                   //蚂蚁对象
	  int pos;                 //位置
	  int direction;           //走向
	  int state=0;             //状态
	  public Ant(int pos){
	  	this.pos=pos;
	  }
	  public void move(){                 //移动函数
	  	 if(this.pos<=0||this.pos>=27){   //超出木杆范围就改变这只蚂蚁的状态
	  	 	state=1;
	  	 }
	  	 if(this.direction==0){
	  	 	 this.direction=-1;
	  	}
	  	 this.pos=this.pos+direction;
	  }
}
结果:
           技术分享

蚂蚁爬杆问题(Java面向对象)

标签:java   面向对象 蚂蚁爬杆问题   

原文地址:http://blog.csdn.net/xionghui2013/article/details/45046549

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!