目錄
原題展示
做表理思路
當初始汽水為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);
}
}
}
成功截圖
