海灘上有一堆桃子,五只猴子來(lái)分。第一只猴子把這堆桃子憑據(jù)分為五份,多了一個(gè),這只猴子把多的一個(gè)扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個(gè),它同樣把多的一個(gè)扔入海中,拿...

package Demo41Allot_Peach;
/**
 * 海灘上有一堆桃子,五只猴子來(lái)分。第一只猴子把這堆桃子憑據(jù)分為五份,
 * 多了一個(gè),這只猴子把多的一個(gè)扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個(gè),
 * 它同樣把多的一個(gè)扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問(wèn)海灘上原來(lái)最少有多少個(gè)桃子?
 */
/*
分析:猴子分桃問(wèn)題,按題目的意思來(lái)說(shuō),這一堆桃子的總數(shù)除以五會(huì)余一,它的商除以五也會(huì)余一,但是難點(diǎn)是我們不知道最后一只猴子拿了幾個(gè)桃子。
     所以呢,就要先定義規(guī)則,然后從1開(kāi)始遍歷數(shù)字,符合規(guī)則的就是最少有的桃子數(shù)。
     假設(shè)有x個(gè)桃子,第一只猴子分完后,就是x/5=1,第二只猴子分的時(shí)候就是x/5個(gè)桃子了。
     判斷x%5是否等于1,如果不等于1,則直接不符合,繼續(xù)遍歷,如果等于1,則繼續(xù)比較,最后一個(gè)猴子至少要拿到一個(gè)桃子,且扔掉一個(gè)桃子
 */
public class Allot_Peach {
    public static void main(String[] args) {
        // 關(guān)于index,可以從1開(kāi)始,但是我們知道桃子數(shù)一定是要大于5的,所以從6開(kāi)始
        int index = 6;
        // 一直找,一直找
        while (true) {
            // 對(duì)于每一個(gè)index都調(diào)用finds()方法來(lái)判斷其是否符合條件
            boolean finds = finds(index);
            // 如果符合條件,則輸出結(jié)果,并且終止循環(huán)
            if (finds) {
                System.out.println("海灘上最少有" + index + "個(gè)桃子。"); //最少3121只桃子
                break;
            }
            // 6除以5余1,那么步進(jìn)就得是5,因?yàn)?~4得到的余數(shù)分別為2,3,4,0,當(dāng)然,步進(jìn)為1也是ok,就是效率低了些。
            index += 5;
        }
    }
    /**
     * 定義一個(gè)判斷數(shù)字是否符合條件,符合就返回一個(gè)true,否則返回false
     * 所謂條件就是該數(shù)每次計(jì)算之間,num值一定要大于5,不然怎么分五份呢是不?
     * @param num
     * @return
     */
    public static boolean finds(int num) {
        // 定義要返回的布爾值
        boolean flag = false;
        // 有5只猴子,判斷5次
        for (int i = 1; i <= 5; i++) {
            // 判斷num是否大于5,要是還沒(méi)到第五只猴子呢就不足五個(gè)桃子了,那第五只猴子要生氣了,并且判斷該數(shù)是否除5余1
            if (num > 5 && num % 5 == 1) {
                // 判斷是不是最后一只猴子,如果到最后一直猴子了,且符合條件,就返回true,表明找到了該數(shù)。
                if (i == 5) {
                    flag = true;
                } else {
                    // 如果不是最后一只猴子,那么該猴子丟掉一個(gè),且拿走五分之一,剩下原來(lái)桃子數(shù)-1的4/5
                    num = ((num-1)*4) / 5;
                }
            } else {
                // 如果該數(shù)小于5導(dǎo)致沒(méi)法分了,或者不符合最后能丟掉一個(gè)的條件,直接返回false
                return false;
            }
        }
        return flag;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容