<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一切皆可抽象

    大而無形 庖丁解牛 厚積薄發 滌慮玄覽
       ::  ::  ::  ::  :: 管理

    【原創】蘋果裝箱的算法

    Posted on 2005-10-12 13:52 鋒出磨礪 閱讀(2119) 評論(8)  編輯  收藏 所屬分類: java算法雜談

    如果你有一千個蘋果,有十個箱子,那么現在我要把一千個蘋果放進十個箱子里面,
    放了完之后,不管誰跟我要多少蘋果(包括1000以內的喲),我都可以整箱整箱給
    他,這個問題有解嗎?

    我的思路。
    我從1開始推理的。如果你需要1個,必然有1個箱子裝一個。
    需要兩個,要么給一個箱子裝2個,要么再裝一個的箱子。感覺
    還是裝2個為一箱比較好。那么需要3個時候,就1+2了,那么你需要4個怎么辦。
    是裝一個4個呢,還是裝一個或者2個呢。為了省箱子,我裝4個。
    此時,我發現了規律,1,2,4。那么下一個是8,再下去就是16了,接著32。
    。。。。。。。
    如果有100個,到32的時候,下一個就是64了,總數超過100了。思路改為
    100-(1+2+4+8+16+32)=37。最后一個箱子裝37個。
    當要求的蘋果數在1+2+4+8+16+32=63 和100之間的時候,將算法推諉
    給前面即可。就是先拿37個,剩下的從以前的箱子拼湊。
    至此,推理完畢。

    java實現代碼


    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */

    public class Box {
      private int limit;
      private int code;
      private int applenum;


      public Box(int code,int applenum,int limit) {
         this.limit = limit;
         this.code  = code;
         this.applenum = applenum;

      }
      public int getApplenum() {
        return applenum;
      }
      public int getCode() {
        return code;
      }
      public int getLimit() {
        return limit;
      }
      public void setLimit(int limit) {
        this.limit = limit;
      }
      public void setCode(int code) {
        this.code = code;
      }
      public void setApplenum(int applenum) {
        this.applenum = applenum;
      }

    }


    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */

    public class Apple {
      public Apple() {
      }
      final private int max=100;   // 蘋果總數
      static int   xqs = 99;       // 你需要的蘋果數
      private java.util.Vector Boxvec = new java.util.Vector(); // 箱子和箱子里的蘋果
      private int ai =0;
      private int k = 1;
      public static void main(String args[])
      {
        Apple apple = new Apple();
        apple.InBox(1);
        System.out.println("共需裝"+apple.GetBoxVec().size()+"箱");
        for (int i=0;i<apple.GetBoxVec().size();i++)
        {
          Box box = (Box)apple.GetBoxVec().get(i);
          System.out.println("第 ‘"+box.getCode()+"’ 箱裝'"+box.getApplenum()+"' ");
        }
        apple.GetApple(xqs,apple.GetBoxVec());
      }

      public void GetApple(int x,java.util.Vector vec)
      {
        if (x==1)
        {
         System.out.println("拿第一箱玩去,就1個");
        }
        else
        {
          if (x != 0) {
            int key = 0;
            for (int i = 0; i < vec.size() - 1; i++) {
              Box xbox = (Box) vec.get(i);
              Box ybox = (Box) vec.get(i + 1);
              if (x > xbox.getLimit() && x <= ybox.getLimit()) {
                key = i + 2;
                System.out.println("拿第" + ybox.getCode() + "箱給他,共" +
                                   ybox.getApplenum() + "個");
                GetApple(x - ybox.getApplenum(), vec);
              }
            }
          }
          else
            System.out.println("完成");
        }

      }

      public void InBox(int i)
      {
        if ((i+i)>=max)
        {
          Box box = new Box(k,max-ai,max);
          Boxvec.add(box);
        }
        else
        {
          Box box = new Box(k,i,i+ai);
          k++;
          Boxvec.add(box);
          ai = ai + i;
          InBox(i+i);
        }
      }
      public java.util.Vector GetBoxVec()
      {
        return Boxvec;
      }

    }


    評論

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2005-10-14 18:42 by 小虎
    1,1,2,5,10,20,50,100,200,500
    這樣行嗎?

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2005-10-16 11:19 by 鋒出磨礪
    小虎:你的算法,如果我需要40,90,140,190,240,290。。。看來是無法給我了。

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2005-10-16 21:45 by 小虎
    不好意思 沒考慮好^_^!

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2006-08-25 01:13 by LittleBug
    1,2,4,8,16,32,64,128,256,489
    對嗎?

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2006-08-25 01:14 by LittleBug
    但是我不懂其中的規律

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2008-05-20 17:16 by why0603
    9*1 + 9*10 + 9*100 = 999

    哎!其實根據RMB的搭配,可以將
    9*1=(1+2+3+4)*1
    9*10=(1+2+3+4)*10
    ......
    雷同
    這樣的話箱子的數目真是太少了....
    MY GOD,啥思想

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2008-05-20 17:22 by why0603
    再修正一次
    當10*1后,只需要9*10
    so 9*10 = (2+3+4)*10
    so 9*100 = (2+3+4)*100
    so 10*1 = (1+2+3+4)*1

    # re: 【原創】蘋果裝箱的算法  回復  更多評論   

    2009-04-25 09:30 by kitto
    1 1 3 5 10 30 50 100 300 500
    主站蜘蛛池模板: 亚洲中文字幕一区精品自拍| 亚洲伊人久久大香线蕉影院| 特级毛片aaaa级毛片免费| 免费无码黄十八禁网站在线观看| 亚洲国产成人精品无码区在线网站| 日韩电影免费在线观看| 亚洲VA中文字幕不卡无码| 精品一卡2卡三卡4卡免费视频| 亚洲国产精品成人精品无码区| 三级黄色片免费看| 亚洲乱码国产乱码精品精| 免费的全黄一级录像带| 亚洲一区二区在线视频| 999国内精品永久免费观看| 在线观看日本亚洲一区| 高清国语自产拍免费视频国产| 亚洲a无码综合a国产av中文| 国产不卡免费视频| 亚洲国产免费综合| 亚洲国产综合精品中文第一区| 99久热只有精品视频免费看| 亚洲a级片在线观看| 情侣视频精品免费的国产| 一级看片免费视频| 久久亚洲精品人成综合网| 又粗又大又黑又长的免费视频| 亚洲va中文字幕| 亚洲日韩欧洲无码av夜夜摸| 美丽的姑娘免费观看在线播放| 中文字幕乱码亚洲无线三区 | 午夜精品在线免费观看| 国产偷国产偷亚洲高清人| 中文亚洲AV片不卡在线观看| 免费无码成人AV在线播放不卡| 亚洲 欧洲 日韩 综合在线| 亚洲国产成人精品无码久久久久久综合| 国产激情久久久久影院老熟女免费| 亚洲国产精品一区二区久久| 操美女视频免费网站| 99在线热播精品免费99热| 亚洲一区动漫卡通在线播放|