有一根27厘米的細(xì)木桿,在第3厘米、7厘米、11厘米、17厘米、23厘米這五個(gè)位置上各有一只螞蟻。木桿很細(xì),不能同時(shí)通過(guò)一只螞蟻。開始時(shí),螞蟻的
頭朝左還是朝右是任意的,它們只會(huì)朝前走或調(diào)頭,但不會(huì)后退。當(dāng)任意兩只螞蟻碰頭時(shí),兩只螞蟻會(huì)同時(shí)調(diào)頭朝反方向走。假設(shè)螞蟻們每秒鐘可以走一厘米的距
離。編寫程序,求所有螞蟻都離開木桿的最小時(shí)間和最大時(shí)間。
public?class?AntGame?{
????private?int?maxTime=0,minTime=99999999;
????Ant[]?ant=new?Ant[5];
????Ant?head=new?Ant(0,0);
????
????public?void?initDate(int?s){
????????ant[0]=new?Ant(3,s%2*2-1);
????????ant[1]=new?Ant(7,s/2%2*2-1);
????????ant[2]=new?Ant(11,s/4%2*2-1);
????????ant[3]=new?Ant(17,s/8%2*2-1);
????????ant[4]=new?Ant(23,s/16%2*2-1);
????????
????????head.setNext(ant[0]);
????????for(int?i=0;i<4;i++){
????????????ant[i].setNext(ant[i+1]);
????????}
????????ant[4].setNext(null);
????}
????
????public?void?findResult(){
????????Ant?checkAnt;
????????int?time;
????????for(int?i=0;i<32;i++){
????????????initDate(i);
????????????display();
????????????time=0;
????????????while(head.getNext()!=null){
????????????????
????????????????checkAnt=head.getNext();????????????????
????????????????while(checkAnt!=null){
????????????????????checkAnt.walk();
????????????????????checkAnt=checkAnt.getNext();
????????????????}
????????????????checkAnt=head;
????????????????while(checkAnt!=null&&checkAnt.getNext()!=null){
????????????????????if(checkAnt.getNext().posion<=0||checkAnt.getNext().posion>=27){
????????????????????????checkAnt.setNext(checkAnt.getNext().getNext());
????????????????????????checkAnt=checkAnt.getNext();
????????????????????}
????????????????????else?if(checkAnt.getPosion()==checkAnt.getNext().getPosion()){
????????????????????????checkAnt.back();
????????????????????????checkAnt.getNext().back();
????????????????????????checkAnt=checkAnt.getNext().getNext();
????????????????????}else????
????????????????????????checkAnt=checkAnt.getNext();
????????????????}
????????????????time++;
????????????}
????????????System.out.println(time);
????????????if(time>maxTime)
????????????????maxTime=time;
????????????else?if(time<minTime)
????????????????minTime=time;
????????}
????????System.out.println("minTime:"+minTime+"\tmaxTime:"+maxTime);
????}
????
????public?void?display(){
????????Ant?checkAnt=head.getNext();????????????????
????????while(checkAnt!=null){
????????????System.out.print(checkAnt.getPosion()+"?"+checkAnt.getDirection()+"\t");
????????????checkAnt=checkAnt.getNext();
????????}
????????//System.out.println();
????}
????
????public?static?void?main(String?arg[]){
????????AntGame?m=new?AntGame();
????????m.findResult();
????}
????
????private?class?Ant{
????????private?int?posion;
????????private?int?direction;//1、-1分別代表正反方向
????????private?Ant?next;
????????private?int?step=1;
????????public?Ant(int?posion,int?direction){
????????????this.posion=posion;
????????????this.direction=direction;
????????}
????????public?Ant?getNext()?{
????????????return?next;
????????}
????????public?void?setNext(Ant?next)?{
????????????this.next?=?next;
????????}
????????public?int?getPosion()?{
????????????return?posion;
????????}
????????public?int?getDirection()?{
????????????return?direction;
????????}????????
????????public?void?walk(){
????????????posion+=direction*step;
????????}
????????public?void?back(){
????????????direction=(direction+3)%4;
????????????direction--;
???????????????????????//運(yùn)算后1、-1互換
????????}
????}
}