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

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

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

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2008年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統(tǒng)計(jì)

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個(gè)人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    用遞歸和掃描解決稱球問題

    稱球問題經(jīng)常是面試中的常客,這里我用遞歸做了一個(gè)稱球的程序,貼出來請(qǐng)大家指正。

    代碼下載:
    http://m.tkk7.com/Files/sitinspring/WeighBall20080727160827.zip

    WeighingBall類:
    package com.heyang;

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;

    /**
     * 多個(gè)球中有一個(gè)較重的,用一架天平將其稱量出來,求如何分配稱球方案使得稱球次數(shù)最少。
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-7-26-下午07:51:40
     
    */

    public class WeighingBall{
        
    /**
         * 構(gòu)造函數(shù)
         * 
    @param n 球個(gè)數(shù)
         
    */

        @SuppressWarnings(
    "unchecked")
        
    public WeighingBall(int n){
            
    // 掃描求一個(gè)最小值
            List<WeighingPlan> plans=new ArrayList<WeighingPlan>();
        
            
    for(int i=1;i<=n/2;i++){
                
    int times=weighBall(i,n-2*i);
                
                plans.add(
    new WeighingPlan(i,n-2*i,times));
            }

            
            Collections.sort(plans);
            
    // 打印最小稱量次數(shù)方案
            System.out.println(n+"個(gè)球的最小稱量次數(shù)為"+plans.get(0).getWeighedtimes());
                    
            System.out.println(
    "\t稱量方案有:");
            
    for(WeighingPlan plan:plans){
                System.out.println(
    "\t\t"+plan);
            }

        }

        
        
    /**
         * 分配球
         * 
    @param ballCount
         * 
    @return
         
    */

        
    private int assignBall(int ballCount){
            
            
    if(ballCount<=1){
                
    // 0,1個(gè)球直接得出結(jié)論
                return 0;
            }

            
    else if(ballCount<=3){
                
    // 2,3個(gè)球還需要再稱量一次
                return 1;
            }

            
    else{        
                
    // 重新分配求出最大的數(shù),assignBall和weighBall這兩個(gè)函數(shù)相互調(diào)用就是看能走多深的
                int max=10000;
                
                
    for(int i=1;i<=ballCount/2;i++){
                    
    int times=weighBall(i,ballCount-2*i);
                    
                    
    if(times<max){
                        max
    =times;
                    }

                }

                
                
    return max;
            }

        }

        
        
    /**
         * 稱球
         * 
    @param ballCountOnBalance :天平上的球個(gè)數(shù)
         * 
    @param ballCountOnTable :剩下的球個(gè)數(shù)
         * 
    @return
         
    */

        
    private int weighBall(int ballCountOnBalance,int ballCountOnTable){
            
    // 最大稱量次數(shù)由球個(gè)數(shù)大的決定
            int bigger=ballCountOnBalance>ballCountOnTable?ballCountOnBalance:ballCountOnTable;
            
            
    // 稱一次加一次
            return 1+assignBall(bigger);
        }

        
        
    /**
         * 程序入口
         * 
    @param args
         
    */

        
    public static void main(String[] args){
            
    //new WeighingBall(16);;
            for(int i=3;i<27;i++){
                
    new WeighingBall(i);
            }

        }

    }

    WeighingPlan類:
    package com.heyang;

    /**
     * 稱量計(jì)劃類
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-7-27-下午03:58:01
     
    */

    public class WeighingPlan implements Comparable{
        
    // 天平左右球個(gè)數(shù)
        private int countOnBalance;
        
    // 桌上球個(gè)數(shù)
        private int countOnTable;
        
    // 稱量次數(shù)
        private int weighedtimes;
        
        
    public WeighingPlan(int countOnBalance,int countOnTable,int weighedtimes){
            
    this.countOnBalance=countOnBalance;
            
    this.countOnTable=countOnTable;
            
    this.weighedtimes=weighedtimes;
        }

        
        
    public int compareTo(Object obj){
            WeighingPlan another
    =(WeighingPlan)obj;
            
            
    return this.weighedtimes-another.weighedtimes;
        }

        
        
    public String toString(){
            
    return "稱量次數(shù)為"+weighedtimes+" 稱量方案為("+countOnBalance+","+countOnBalance+","+countOnTable+")";
        }


        
    public int getCountOnBalance() {
            
    return countOnBalance;
        }


        
    public void setCountOnBalance(int countOnBalance) {
            
    this.countOnBalance = countOnBalance;
        }


        
    public int getCountOnTable() {
            
    return countOnTable;
        }


        
    public void setCountOnTable(int countOnTable) {
            
    this.countOnTable = countOnTable;
        }


        
    public int getWeighedtimes() {
            
    return weighedtimes;
        }


        
    public void setWeighedtimes(int weighedtimes) {
            
    this.weighedtimes = weighedtimes;
        }

    }


    輸出:
    3個(gè)球的最小稱量次數(shù)為1
        稱量方案有:
            稱量次數(shù)為1 稱量方案為(
    1,1,1)
    4個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    1,1,2)
            稱量次數(shù)為2 稱量方案為(
    2,2,0)
    5個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    1,1,3)
            稱量次數(shù)為2 稱量方案為(
    2,2,1)
    6個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    2,2,2)
            稱量次數(shù)為2 稱量方案為(
    3,3,0)
            稱量次數(shù)為3 稱量方案為(
    1,1,4)
    7個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    2,2,3)
            稱量次數(shù)為2 稱量方案為(
    3,3,1)
            稱量次數(shù)為3 稱量方案為(
    1,1,5)
    8個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    3,3,2)
            稱量次數(shù)為3 稱量方案為(
    1,1,6)
            稱量次數(shù)為3 稱量方案為(
    2,2,4)
            稱量次數(shù)為3 稱量方案為(
    4,4,0)
    9個(gè)球的最小稱量次數(shù)為2
        稱量方案有:
            稱量次數(shù)為2 稱量方案為(
    3,3,3)
            稱量次數(shù)為3 稱量方案為(
    1,1,7)
            稱量次數(shù)為3 稱量方案為(
    2,2,5)
            稱量次數(shù)為3 稱量方案為(
    4,4,1)
    10個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    1,1,8)
            稱量次數(shù)為3 稱量方案為(
    2,2,6)
            稱量次數(shù)為3 稱量方案為(
    3,3,4)
            稱量次數(shù)為3 稱量方案為(
    4,4,2)
            稱量次數(shù)為3 稱量方案為(
    5,5,0)
    11個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    1,1,9)
            稱量次數(shù)為3 稱量方案為(
    2,2,7)
            稱量次數(shù)為3 稱量方案為(
    3,3,5)
            稱量次數(shù)為3 稱量方案為(
    4,4,3)
            稱量次數(shù)為3 稱量方案為(
    5,5,1)
    12個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    2,2,8)
            稱量次數(shù)為3 稱量方案為(
    3,3,6)
            稱量次數(shù)為3 稱量方案為(
    4,4,4)
            稱量次數(shù)為3 稱量方案為(
    5,5,2)
            稱量次數(shù)為3 稱量方案為(
    6,6,0)
            稱量次數(shù)為4 稱量方案為(
    1,1,10)
    13個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    2,2,9)
            稱量次數(shù)為3 稱量方案為(
    3,3,7)
            稱量次數(shù)為3 稱量方案為(
    4,4,5)
            稱量次數(shù)為3 稱量方案為(
    5,5,3)
            稱量次數(shù)為3 稱量方案為(
    6,6,1)
            稱量次數(shù)為4 稱量方案為(
    1,1,11)
    14個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    3,3,8)
            稱量次數(shù)為3 稱量方案為(
    4,4,6)
            稱量次數(shù)為3 稱量方案為(
    5,5,4)
            稱量次數(shù)為3 稱量方案為(
    6,6,2)
            稱量次數(shù)為3 稱量方案為(
    7,7,0)
            稱量次數(shù)為4 稱量方案為(
    1,1,12)
            稱量次數(shù)為4 稱量方案為(
    2,2,10)
    15個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    3,3,9)
            稱量次數(shù)為3 稱量方案為(
    4,4,7)
            稱量次數(shù)為3 稱量方案為(
    5,5,5)
            稱量次數(shù)為3 稱量方案為(
    6,6,3)
            稱量次數(shù)為3 稱量方案為(
    7,7,1)
            稱量次數(shù)為4 稱量方案為(
    1,1,13)
            稱量次數(shù)為4 稱量方案為(
    2,2,11)
    16個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    4,4,8)
            稱量次數(shù)為3 稱量方案為(
    5,5,6)
            稱量次數(shù)為3 稱量方案為(
    6,6,4)
            稱量次數(shù)為3 稱量方案為(
    7,7,2)
            稱量次數(shù)為3 稱量方案為(
    8,8,0)
            稱量次數(shù)為4 稱量方案為(
    1,1,14)
            稱量次數(shù)為4 稱量方案為(
    2,2,12)
            稱量次數(shù)為4 稱量方案為(
    3,3,10)
    17個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    4,4,9)
            稱量次數(shù)為3 稱量方案為(
    5,5,7)
            稱量次數(shù)為3 稱量方案為(
    6,6,5)
            稱量次數(shù)為3 稱量方案為(
    7,7,3)
            稱量次數(shù)為3 稱量方案為(
    8,8,1)
            稱量次數(shù)為4 稱量方案為(
    1,1,15)
            稱量次數(shù)為4 稱量方案為(
    2,2,13)
            稱量次數(shù)為4 稱量方案為(
    3,3,11)
    18個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    5,5,8)
            稱量次數(shù)為3 稱量方案為(
    6,6,6)
            稱量次數(shù)為3 稱量方案為(
    7,7,4)
            稱量次數(shù)為3 稱量方案為(
    8,8,2)
            稱量次數(shù)為3 稱量方案為(
    9,9,0)
            稱量次數(shù)為4 稱量方案為(
    1,1,16)
            稱量次數(shù)為4 稱量方案為(
    2,2,14)
            稱量次數(shù)為4 稱量方案為(
    3,3,12)
            稱量次數(shù)為4 稱量方案為(
    4,4,10)
    19個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    5,5,9)
            稱量次數(shù)為3 稱量方案為(
    6,6,7)
            稱量次數(shù)為3 稱量方案為(
    7,7,5)
            稱量次數(shù)為3 稱量方案為(
    8,8,3)
            稱量次數(shù)為3 稱量方案為(
    9,9,1)
            稱量次數(shù)為4 稱量方案為(
    1,1,17)
            稱量次數(shù)為4 稱量方案為(
    2,2,15)
            稱量次數(shù)為4 稱量方案為(
    3,3,13)
            稱量次數(shù)為4 稱量方案為(
    4,4,11)
    20個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    6,6,8)
            稱量次數(shù)為3 稱量方案為(
    7,7,6)
            稱量次數(shù)為3 稱量方案為(
    8,8,4)
            稱量次數(shù)為3 稱量方案為(
    9,9,2)
            稱量次數(shù)為4 稱量方案為(
    1,1,18)
            稱量次數(shù)為4 稱量方案為(
    2,2,16)
            稱量次數(shù)為4 稱量方案為(
    3,3,14)
            稱量次數(shù)為4 稱量方案為(
    4,4,12)
            稱量次數(shù)為4 稱量方案為(
    5,5,10)
            稱量次數(shù)為4 稱量方案為(
    10,10,0)
    21個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    6,6,9)
            稱量次數(shù)為3 稱量方案為(
    7,7,7)
            稱量次數(shù)為3 稱量方案為(
    8,8,5)
            稱量次數(shù)為3 稱量方案為(
    9,9,3)
            稱量次數(shù)為4 稱量方案為(
    1,1,19)
            稱量次數(shù)為4 稱量方案為(
    2,2,17)
            稱量次數(shù)為4 稱量方案為(
    3,3,15)
            稱量次數(shù)為4 稱量方案為(
    4,4,13)
            稱量次數(shù)為4 稱量方案為(
    5,5,11)
            稱量次數(shù)為4 稱量方案為(
    10,10,1)
    22個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    7,7,8)
            稱量次數(shù)為3 稱量方案為(
    8,8,6)
            稱量次數(shù)為3 稱量方案為(
    9,9,4)
            稱量次數(shù)為4 稱量方案為(
    1,1,20)
            稱量次數(shù)為4 稱量方案為(
    2,2,18)
            稱量次數(shù)為4 稱量方案為(
    3,3,16)
            稱量次數(shù)為4 稱量方案為(
    4,4,14)
            稱量次數(shù)為4 稱量方案為(
    5,5,12)
            稱量次數(shù)為4 稱量方案為(
    6,6,10)
            稱量次數(shù)為4 稱量方案為(
    10,10,2)
            稱量次數(shù)為4 稱量方案為(
    11,11,0)
    23個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    7,7,9)
            稱量次數(shù)為3 稱量方案為(
    8,8,7)
            稱量次數(shù)為3 稱量方案為(
    9,9,5)
            稱量次數(shù)為4 稱量方案為(
    1,1,21)
            稱量次數(shù)為4 稱量方案為(
    2,2,19)
            稱量次數(shù)為4 稱量方案為(
    3,3,17)
            稱量次數(shù)為4 稱量方案為(
    4,4,15)
            稱量次數(shù)為4 稱量方案為(
    5,5,13)
            稱量次數(shù)為4 稱量方案為(
    6,6,11)
            稱量次數(shù)為4 稱量方案為(
    10,10,3)
            稱量次數(shù)為4 稱量方案為(
    11,11,1)
    24個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    8,8,8)
            稱量次數(shù)為3 稱量方案為(
    9,9,6)
            稱量次數(shù)為4 稱量方案為(
    1,1,22)
            稱量次數(shù)為4 稱量方案為(
    2,2,20)
            稱量次數(shù)為4 稱量方案為(
    3,3,18)
            稱量次數(shù)為4 稱量方案為(
    4,4,16)
            稱量次數(shù)為4 稱量方案為(
    5,5,14)
            稱量次數(shù)為4 稱量方案為(
    6,6,12)
            稱量次數(shù)為4 稱量方案為(
    7,7,10)
            稱量次數(shù)為4 稱量方案為(
    10,10,4)
            稱量次數(shù)為4 稱量方案為(
    11,11,2)
            稱量次數(shù)為4 稱量方案為(
    12,12,0)
    25個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    8,8,9)
            稱量次數(shù)為3 稱量方案為(
    9,9,7)
            稱量次數(shù)為4 稱量方案為(
    1,1,23)
            稱量次數(shù)為4 稱量方案為(
    2,2,21)
            稱量次數(shù)為4 稱量方案為(
    3,3,19)
            稱量次數(shù)為4 稱量方案為(
    4,4,17)
            稱量次數(shù)為4 稱量方案為(
    5,5,15)
            稱量次數(shù)為4 稱量方案為(
    6,6,13)
            稱量次數(shù)為4 稱量方案為(
    7,7,11)
            稱量次數(shù)為4 稱量方案為(
    10,10,5)
            稱量次數(shù)為4 稱量方案為(
    11,11,3)
            稱量次數(shù)為4 稱量方案為(
    12,12,1)
    26個(gè)球的最小稱量次數(shù)為3
        稱量方案有:
            稱量次數(shù)為3 稱量方案為(
    9,9,8)
            稱量次數(shù)為4 稱量方案為(
    1,1,24)
            稱量次數(shù)為4 稱量方案為(
    2,2,22)
            稱量次數(shù)為4 稱量方案為(
    3,3,20)
            稱量次數(shù)為4 稱量方案為(
    4,4,18)
            稱量次數(shù)為4 稱量方案為(
    5,5,16)
            稱量次數(shù)為4 稱量方案為(
    6,6,14)
            稱量次數(shù)為4 稱量方案為(
    7,7,12)
            稱量次數(shù)為4 稱量方案為(
    8,8,10)
            稱量次數(shù)為4 稱量方案為(
    10,10,6)
            稱量次數(shù)為4 稱量方案為(
    11,11,4)
            稱量次數(shù)為4 稱量方案為(
    12,12,2)
            稱量次數(shù)為4 稱量方案為(
    13,13,0)

    posted on 2008-07-27 00:11 sitinspring 閱讀(1207) 評(píng)論(2)  編輯  收藏 所屬分類: 算法數(shù)據(jù)結(jié)構(gòu)

    評(píng)論

    # re: 用遞歸和掃描解決稱球問題 2008-07-28 01:10 yegong

    沒這么簡單
    最簡單的秤球問題有兩種
    1. 有一壞球,不知輕重,此外還有一標(biāo)準(zhǔn)球
    2. 有3個(gè)球,知到壞球輕還是重

    簡單的這樣劃分個(gè)數(shù)是沒有意義的
    至少要給出每一步左右盤上的編號(hào)  回復(fù)  更多評(píng)論   

    # re: 用遞歸和掃描解決稱球問題 2008-07-28 09:31 Jacky-Q

    已知異常球是過重還是過輕的情況下,稱量次數(shù)是logN/log3,這個(gè)算是標(biāo)準(zhǔn)答案了。  回復(fù)  更多評(píng)論   

    sitinspring(http://m.tkk7.com)原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處.
    主站蜘蛛池模板: 国产精品亚洲自在线播放页码| 亚洲中文字幕无码日韩| 亚洲日产2021三区| 久久免费公开视频| 亚洲精品亚洲人成人网| 国产日韩在线视频免费播放| 久久亚洲高清综合| 99在线免费观看| 亚洲AV日韩AV高潮无码专区| 国产成人AV片无码免费| 久久久久亚洲AV无码专区首JN| 永久免费在线观看视频| 亚洲一卡2卡3卡4卡国产网站| 日韩吃奶摸下AA片免费观看| 亚洲色成人网站WWW永久四虎| 四虎www成人影院免费观看| 亚洲AV无码成人精品区狼人影院| 免费国产成人高清在线观看麻豆| 日韩毛片一区视频免费| 亚洲伊人久久精品影院| 日本一卡精品视频免费| 亚洲人成影院午夜网站| 国产免费人成在线视频| a级特黄毛片免费观看| 91亚洲国产成人精品下载| 久久不见久久见中文字幕免费 | 久久久久国产成人精品亚洲午夜 | 免费a级毛片无码a∨性按摩| 国产成人无码免费看片软件 | 色噜噜AV亚洲色一区二区| 美丽姑娘免费观看在线观看中文版 | 亚洲乱码一区二区三区在线观看 | 亚洲中文字幕乱码一区| 亚洲精品视频久久久| 日本免费人成视频在线观看| 亚洲精品天堂无码中文字幕| 精品国产亚洲一区二区在线观看| 99在线观看精品免费99| 久久久久久久久无码精品亚洲日韩| 亚洲色精品88色婷婷七月丁香| 国产桃色在线成免费视频|