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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© PDH 中级黑马   /  2015-9-8 18:22  /  917 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class PingGaiPro {

        /**
         * 问题:有x个人买可乐喝,3个瓶盖可以换一瓶可乐,问需要至少买多少瓶可乐
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(bottleSum(27));
                System.out.println(bottleSum_1(27));
        }
        //模仿一次一次的买可乐实现
        //思路:每次购买1瓶,达到3瓶进行一次兑换,循环,直到够每人一瓶
        public static int bottleSum(int x){
                int sum=0;  
                int temp=0;
                for(int i=1;i<=x;i++){  //模仿每个人分到一瓶可乐
                        temp++;
                        if(temp==3){   //如果手头的可乐达到了3瓶则sum不加,并清零temp
                                temp=0;
                                continue;
                        }
                        sum++;   //sum记录买了多少瓶
                }
                return sum;
        }
        //从总人数上面入手算出需要多少个
        //思路是:每三个人一组,买两瓶可乐,和老板借一瓶可乐,然后喝完,拿三个盖子换一瓶新可乐,然后还给老板,这样的话付出2瓶满足三个人
        public static int bottleSum_1(int x){
                return 2*x/3;  
        }

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

3 个回复

倒序浏览
有不同思路欢迎切磋,共同进步
回复 使用道具 举报
关于自己上面代码的优化,我刚看了一下,可以把bottleSum(int x)方法中的temp变量省掉,if语句改成if(i%3==0)  sum--;    这样就可以了。不过不容易理解了就,看来写代码是门艺术啊!
回复 使用道具 举报
bottleSum_1(int x)方法中应该返回 return 2*x/3+x%3;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马