黑马程序员技术交流社区

标题: 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多... [打印本页]

作者: 小蔡@¥¥¥    时间: 2016-8-26 22:00
标题: 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多...
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

作者: life写实    时间: 2016-8-26 23:41
你就一瓶一瓶的买嘛。也就是从0开始一瓶一瓶的买
//首先定义一个实际花钱买到的可乐瓶数变量 a,也就是你达到目的最终到底是花多少钱
int a=0;
//再定义一个花钱买到的加空瓶兑换到的变量 b,也就是实际拿到手的可乐瓶数
int b=0;
//再设置一个要喝到的具体可乐瓶数,也就是题目的要求28个人要喝可乐。
int c=28
//由于不知道用一瓶一瓶这样买的方式具体多少次,所以采用while循环。
//当实际拿到手的可乐瓶数,也就是b,不超过28,我们就需要继续买。
while(b<=28){
    //只要没到28,我就买一次
    a++;
    b++;
    //如果实际拿到手的可乐瓶数满足三瓶,我就去换一瓶
    if(b%3==0){
        b++;
    }
}
//最后打印花了多少钱即可
System.out.println(a);

作者: life写实    时间: 2016-8-26 23:43
不是很严谨,凑合着看吧
作者: 水月灬清影    时间: 2016-8-27 08:36
先换后买,不然有问题
作者: yuanxianzhi    时间: 2016-8-27 10:31
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
                int count = 28;//一共28瓶可乐
                int kele = 0;  //从0开始购买
                int pinggai = 0;//瓶盖数量
                for (int i = 1; kele <= count; i++) {
                        kele++;//每买一次,可乐多一瓶     i=购买次数
                        pinggai++;//瓶盖多一个
                        if (pinggai / 3 == 1) { //当累计的瓶盖达到3个可以兑换一瓶,
                                kele++;                         //这个时候可乐数量+1,
                                pinggai -= 2;                //瓶盖数量-2,,因为多了瓶可乐就多了个瓶盖  -3再+1
                        }
                        if (kele == 28) {       //可乐慢28,打印出买了多少瓶可乐 i
                                System.out.println("一共买了" + i + "瓶可乐");
                        }
                }
        }

作者: yuanxianzhi    时间: 2016-8-27 11:08
[Java] 纯文本查看 复制代码

        public static void main(String[] args) {

                int persons = 28;
                buyCoke(persons);

        }

        /**
         * 通过人数判断买多少瓶可乐刚刚好
         * @param persons 需要可乐的人数
         */
        public static void buyCoke(int persons) {
                int buy = 0;
                int pinggai = 0;
                for (int i = 1; i <= persons; i++) {
                        buy++;
                        pinggai++;
                        // 当一次性买多少瓶的 + 瓶盖可置换的可乐 = 需求人数 程序终止
                        if ((buy + exchange(pinggai)) == persons) {
                                System.out.println(persons + "人每人一瓶可乐,一共需要买" + buy + "瓶");
                                return;
                        }
                }

        }

        /**
         * 通过瓶盖的数量确认可以换多少瓶可乐
         * @param pinggai 瓶盖数量
         * @return 可置换可乐数量
         */
        public static int exchange(int pinggai) {
                // 0.1.2个瓶盖换不了可乐
                if (pinggai == 0 || pinggai == 1 || pinggai == 2) {
                        return 0;
                } else {
                        int Coke = pinggai / 3;// 3瓶盖 可以兑换 1可乐+1瓶盖,
                        int left = pinggai % 3;// 这是置换可乐后剩余的瓶盖
                        return Coke + exchange(Coke + left);// 返回置换的可乐数量
                        // ↑将剩余的瓶盖 和 置换可乐后产生的瓶盖 再用于置换可乐,当瓶盖不足以换可乐 就O了
                }
        }

作者: 小蔡@¥¥¥    时间: 2016-8-27 20:53
yuanxianzhi 发表于 2016-8-27 11:08
[mw_shl_code=java,true]
        public static void main(String[] args) {

哦,好像挺对的;;;;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2