天天看點

JAVA 遞歸算法- 椰子汁5元一瓶,4個蓋子可以換一瓶椰子汁,3個空瓶可以換一瓶椰子汁,那麼 100 塊錢可以喝多少瓶椰子汁,剩下瓶蓋和空瓶各多少?

目錄

原題展示

做表理思路

當初始汽水為3瓶時

當初始汽水為4瓶時

分析提取資料邏輯

瓶子的個數的計算

蓋子的個數的計算

汽水數目的計算

取模運算

源代碼

成功截圖

原題展示

椰子汁5元一瓶,4個蓋子可以換一瓶椰子汁,3個空瓶可以換一瓶椰子汁,那麼 100 塊錢可以喝多少瓶椰子汁,剩下瓶蓋和空瓶各多少?

做表理思路

當初始汽水為3瓶時

瓶子 3 1 2
蓋子 3 4 1
汽水 3 4 5

具體就是

瓶子 3 3/3+3%3+3/4=1 1/3+1%3+4/4=0+1+1=2
蓋子 3 3/4+3%4+3/3=0+3+1=4 4/4+4%4+1/3=1+0+0=1
汽水 3 3+3/3+3/4=4 4+1/3+4/4=5

當初始汽水為4瓶時

瓶子 4 3 1
蓋子 4 2 3
汽水 4 6 7

具體就是

瓶子 4 4/3+4%3+4/4=3 3/3+6%3+2/4=1
蓋子 4 4/4+4%4+4/3=2 2/4+6%4+3/3=0+2+1=3
汽水 4 4+4/3+4/4=6 6+3/3+2/4=7

分析提取資料邏輯

相信經過上面4個表格的運算邏輯已經十分明顯了!!

接下來我們将邏輯好好理理就可以寫代碼了,其中我們先算瓶子個數

瓶子的個數的計算

先用瓶子的目前數量除以3,再加上瓶子的目前數量模3,再加上蓋子的目前數量除以4。

為什麼要這樣寫呢?

很簡單因為當瓶子數量改變的時候,蓋子數量也會改變,是以才有了最後那一句蓋子的數量除以4如果這個值大于1說明這又可以換水了,如果可以換水也就是說瓶子的數目也會再次改變了!

是以我們需要加上後面那一句這很重要!

再往前面分析一下,為什麼要用目前汽水的數目模3呢?

答案很簡單為了算出目前瓶子在兌換汽水後,我們還剩下的瓶子數目,因為這是一個動态變化的過程呀!

再往前為什麼要用瓶子數除以3呢?

相信這個都很好了解,就是算出目前瓶子的個數能夠換取多少瓶汽水,。

OK總理一下邏輯。

瓶子的目前個數=瓶子能夠換取的汽水個數+瓶子剩餘的個數再+蓋子能夠換取汽水的數目。

int tempcap=cap/4;
            int tempbottle=bottle/3;
            bottle=tempbottle+tempcap+drink%3;
           

由此上面的邏輯式子,就一目了然了

蓋子的個數的計算

以此類推蓋子的數目也可以算出來

int tempcap=cap/4;
            int tempbottle=bottle/3;
            cap=tempcap+tempbottle+drink%4;
           

汽水數目的計算

最後就是目前汽水的數目這個更好了解

目前汽水的數目=原來汽水的數目+瓶子能夠換取的汽水數目+蓋子能換取的汽水數目

int tempcap=cap/4;
            int tempbottle=bottle/3;
            drink=drink+tempcap+tempbottle;
           

取模運算

最後補充一點就是取模運算,請問2模3結果是多少?

答案是2,很多人以為答案是一這是一個易錯點,容易自己把自己給搞糊塗

我們還是先寫出平常資料

假如3/2,模是1;(減去2的倍數2,剩下1)

假如5/2,模是1;(減去2的倍數4,剩下1)

假如8/3,模是2; (減去3的倍數6,剩下2)

那麼我們就可以總結出來,2%3的過程是(2減去3的0倍,剩下2)故答案是2

源代碼

import java.util.Scanner;

public class Main {
    public static void main(String[] args)
    {

        Scanner input=new Scanner(System.in);
        System.out.println("請輸入價錢");
        int initsum=input.nextInt()/5;
        getDrink(initsum,initsum,initsum);
}

    public static int getDrink(int drink,int cap,int bottle)
    {
        if(cap<4&&bottle<3)
        {
            System.out.printf("結果是如下:\n剩餘蓋子:%d 剩餘瓶子:%d 剩餘汽水:%d\n",cap,bottle,drink);
            return 0;
        }
        else {
            int tempcap=cap/4;
            int tempbottle=bottle/3;
            cap=tempcap+tempbottle+drink%4;
            bottle=tempbottle+tempcap+drink%3;

            drink=drink+tempcap+tempbottle;
            System.out.printf("目前蓋子:%d 目前瓶子:%d 目前汽水:%d\n",cap,bottle,drink);

            return getDrink(drink,cap,bottle);
        }
    }

}
           

成功截圖

JAVA 遞歸算法- 椰子汁5元一瓶,4個蓋子可以換一瓶椰子汁,3個空瓶可以換一瓶椰子汁,那麼 100 塊錢可以喝多少瓶椰子汁,剩下瓶蓋和空瓶各多少?