- package com.itheima;
- /**
- * 第10题:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
- *
- * @author 蒋雪萍
- *
- * 分析思路:
- * 1,想要统计出n个人需要购买的可乐瓶数,先计算出n-1个人所需要购买的可乐甁数;
- * 2,以此类推,应先计算出1个人时应该购买的可乐数量,显而易见应该为1,此时拥有1个瓶盖;
- * 3,当计算1+1个人所需要购买的可乐数时,先判断是否拥有三个瓶盖,
- * 3.1 如果有,则可以用瓶盖换取一瓶可乐,应购买的可乐数不变
- * 3.2 如果没有三个瓶盖,则需要购买一瓶可乐,瓶盖数加1;
- * 4,类推计算出n个人应该购买的可乐甁数。
- *
- * 通过分析,可以看出n个人和n-1个人所需购买可乐数之间的关系,考虑采用递归的形式来解题。
- **/
- public class Test10 {
- public static void main(String[] args)
- {
- //输出28个人所需要购买的可乐的瓶数,当还有28人时,
- System.out.println("28个人所需要购买的可乐数量:"+Count(28,0,0));
-
- //输出50个人所需要购买的可乐的瓶数
- System.out.println("50个人所需要购买的可乐数量:"+Count(50,0,0));
- }
-
- /**
- * 统计peopleNum个人所需要购买的可乐的数量
- * @param peopleNum 还需要购买可乐的人的人数
- * @param ColaNum 已经购买的可乐的数量
- * @param ColaCapNum 统计当前可乐瓶盖数,当瓶盖等于3,ColaNum减1,ColaCapNum赋值为0
- * */
- public static int Count(int peopleNum,int ColaNum,int ColaCapNum)
- {
- //递归的结束标志,当没有人需要购买可乐的时候结束,并返回已经购买的可乐的数量
- if(peopleNum==0)
- {
- return ColaNum;
- }
-
- //当可乐的瓶盖数为3时,可以换成一瓶可乐,因此可以看做已经购买的可乐数减1,且可乐瓶盖数赋值为0
- if(ColaCapNum==3){
- //当瓶盖数满3时,可乐数量减1
- ColaNum--;
- ColaCapNum=0;
- }
-
- //当还有人需要购买可乐时,就继续调用Count方法,统计peopleNum-1个人需要购买多少瓶可乐
- //此时ColaNum的数量加1,瓶盖数加1
- return Count(peopleNum-1,ColaNum+1,ColaCapNum+1);
- }
- }
复制代码 |