目录
原题展示
椰子汁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);
}
}
}
成功截图