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 聽風 閱讀(625) 評論(0)  編輯  收藏 所屬分類: JAVA

          主站蜘蛛池模板: 邮箱| 渝中区| 安新县| 拜泉县| 讷河市| 伊吾县| 盐边县| 若羌县| 鸡泽县| 抚远县| 蓝山县| 新邵县| 青岛市| 新干县| 临湘市| 合肥市| 静海县| 中阳县| 达孜县| 来凤县| 阳泉市| 鹤庆县| 武隆县| 阳原县| 达日县| 濉溪县| 斗六市| 平和县| 左贡县| 丹阳市| 邛崃市| 黄龙县| 沈阳市| 南昌市| 保山市| 甘肃省| 芒康县| 白朗县| 丽江市| 赤壁市| 佛冈县|