A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.itheima;
/**
* 28人买可乐喝,
* 3个可乐瓶盖可以换一瓶可乐,
* 那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
* @author Administrator
* 思路: (这里只考虑实现,不考虑算法的效率)
*        3个瓶盖换一瓶可乐,也就是当手中瓶盖数量为3时,
*         可以让 饮用人的数量加一,手中瓶盖数量变成1
* 实现:定义3个变量,第一个boottle 表示购买的瓶数 从0开始,
*                             第二个 bottleCap 表示手机从0开始,当手中瓶盖数为3时,马上去换,换后bottleCap置为1,饮用人数加1
*                             第三个变量 people表示喝到可乐的人数量
*/
public class Test10 {

    public static void main(String[] args) {
        System.out.println( "需要28个人喝时 得购买"+method(28) );
        System.out.println( "需要50个人喝时 得购买"+method(50) );
    }
    /**
     *
     * @param people 需要让喝到可乐的人的数量
     * @return
     */
    public static int method(int people){
        //初始化购买的瓶数
        int boottle =0;
        //初始话当前手中的瓶盖数
        int bottleCap = 0;
        //初始化喝到可乐的人数
        int drinker =0;
        for(int i=1;i<people;i++){
            //购买的瓶数+1
            boottle++;
            //喝到的人数+1
            drinker++;
            //当前手中的瓶盖数
            bottleCap++;
            //如果手中瓶盖数为3,立即调换
            if(bottleCap==3){
                //调换之后,手中瓶盖数为1
                bottleCap=1;
                //饮用人数+1
                drinker++;
            }
//            System.out.println("购买"+boottle+"杯时可以够"+drinker+"个人喝");
            //如果喝到的人数等于需要的人数,退出循环
            if(drinker==people)
                break;
        }
        //输出需要购买的瓶数
        return boottle;
        
    }
}


评分

参与人数 1黑马币 +61 收起 理由
zhuoxiuwu + 61 刚好在找这个思路,你这挺好理解的,分给你.

查看全部评分

4 个回复

倒序浏览
  1.         public static int cap3to1(int x){
  2.                 return x%3 == 0 ? x/3*2+1 : x/3*2+1+x%3-1;
  3.         }
复制代码

分成3个人一组

第一组买3瓶可乐可以换一瓶可乐,给后面一组.

后面只要买2瓶可乐就会有3个瓶盖了,就这样一直下去
人数: 3 3 3 3 3 3 2 = 20
可乐: 3 2 2 2 2 2 1 = 14
回复 使用道具 举报
非常感谢,虽然这个东西没什么用
回复 使用道具 举报
半月 发表于 2015-7-8 14:23
分成3个人一组

第一组买3瓶可乐可以换一瓶可乐,给后面一组.

你这算法写的非常精辟啊,学习了。思路不同,我是直接按理解来写的
回复 使用道具 举报
这题我想想就蛋疼- -
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马