<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 鋒出磨礪 閱讀(2118) 評論(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
    主站蜘蛛池模板: 国产亚洲精品美女久久久久| 亚洲最新视频在线观看| 亚洲黄色网站视频| 最近更新免费中文字幕大全| 国产亚洲精品岁国产微拍精品| 国产精品高清免费网站| 在线观看亚洲成人| a级片在线免费看| 久久亚洲AV午夜福利精品一区| 国产高清不卡免费视频| 久久久久亚洲AV无码专区体验| h片在线免费观看| 亚洲乱码中文论理电影| 三年片在线观看免费大全| 亚洲Av永久无码精品一区二区| 免费久久精品国产片香蕉| 国产黄色片免费看| 久久99亚洲网美利坚合众国| 久久国内免费视频| 国产亚洲一卡2卡3卡4卡新区 | 永久免费AV无码网站在线观看| 亚洲日韩一区二区一无码| 国产无遮挡裸体免费视频| 男人免费视频一区二区在线观看 | 国产激情久久久久影院老熟女免费| 中文字幕亚洲日本岛国片| 无码少妇精品一区二区免费动态| 亚洲免费闲人蜜桃| 免费jjzz在线播放国产| 国产无遮挡裸体免费视频在线观看 | 亚洲五月激情综合图片区| 福利免费观看午夜体检区| 香蕉视频在线观看免费| 国产AV无码专区亚洲AV毛网站| 亚洲免费人成视频观看| 国产精品亚洲综合| 亚洲天天做日日做天天欢毛片| 午夜高清免费在线观看| 国产成人AV免费观看| 国产精品亚洲综合五月天| 亚洲性久久久影院|