目录

原题展示

做表理思路

当初始汽水为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);
        }
    }

}

成功截图