hello world

随笔 - 2, 文章 - 63, 评论 - 0, 引用 - 0
数据加载中……

百度面试题目--蚂蚁爬杆


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

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
--;
                       
//运算后1、-1互换
        }
    }
}

posted on 2009-10-12 15:19 听风 阅读(615) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航: