亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

程序面試算法問題

程序面試算法問題

慕虎7371278 2018-07-31 17:25:22
A,B,C,D,E五個人捕魚后已凌晨,大家便睡覺。早上A第一個醒來,將魚均分成五份,把多余的一條魚扔掉,拿走自己的一份,B第二個醒來,也將魚均分為五份,把多余的一條魚扔掉,拿走自己的一份。CDE依次醒來,也按同樣的方法拿魚,問他們合伙至少捕了幾條魚。93131213906在別的地方看到的面試題,自己算是3906,據說答案是3121,完全想不通,求教。
查看完整描述

2 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

/**

     * 設第一個人分魚時總數為a1,每人人分的k1,有:t1 = 5*k1+1.剩下的魚為t2 = t1-k1-1;

     * 同理,第二個人魚時有 t2 = 5*k2+1;

     * 結合以上,得出k1 = (5*k2+1)/4,同時要滿足k1,k2為整數.

     * 假設最后每人平分數為k5=t,遞歸的到k1,就可求出總數

     */

        public static void main(String... args) {

            int k = 1;

            int t = k;

            int i = 0;

            while (i < 5){

                if((t*5+1) % 4 == 0){

                    t = (t*5+1)/4;

                }else {

                    t = ++k;

                    i = 0;

                }

                i++;

            }

            System.out.println(5*t+1);

        }


查看完整回答
反對 回復 2018-08-04
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

你算的等于3906是按照 y=(x-1)/5這種方式迭代的吧?題目里面是每個人只是拿走了一份,并不是只留了一份。
考慮每個人分完都拿走了一份,剩下4份,公式應該是 y=4(x-1)/5
暴力代碼如下:

function fish() {

    for(var j = 0; j < 10000; j++) {

        if(canSplit(j)) {

            console.log(j);

        }

    }

}


function canSplit(count) {

    for(var i = 0; i < 5;i++) {

        if((count - 1) % 5 === 0) {

            count = (count - 1) * 4 / 5;

        } else {

            return false;

        }

    }

    return true;

}


fish();

10000以內的三個結果是:
3121
6246
9371

查看完整回答
反對 回復 2018-08-04
  • 2 回答
  • 0 關注
  • 869 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號