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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fanshuai 中级黑马   /  2015-3-5 23:35  /  1005 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
* 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
* 够28人喝?假如是50人,又需要买多少瓶可乐?
* 思路:
* 1.这个问题有两种思考方式,看碰到什么老板
* 2.碰到好老板:买2瓶给你3瓶,不过喝完要把盖子还给老板用简单的% /实现
* 3. 碰到不讲理的老板:必须凑够3个盖子才给你1瓶,2个盖子不能换如果最后累计到了3个瓶盖,
*        还可以换1瓶多余的,没办法,老板不讲理
*4.28和50算出来是一样的,多试几个数就知道两种算出来的不一样,比如6个人,就不一样,碰见不讲理的
*老板的最后会剩下3个盖子,也就是多了1瓶(老板不管你这个,你多买1瓶他就多赚点钱)
*步骤:
*不写了,很简单,代码上有注释。
*/

package cn.heima.test1;

public class BuyCola {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                System.out.println(badBoss(6));
                System.out.println(goodBoss(6));
        }
        //碰见好老板,2瓶2瓶买
        public static int goodBoss(int person){
                //按3人分组,看余多少人
                int per=person%3;
                //分为num组买,3人一组,一次买2瓶
                int num=person/3;
                //2瓶*Num+多余的人数就是要买的可乐数
                return 2*num+per;
        }
        //碰见不讲理的老板,只能3个盖子换1瓶
        public static int badBoss(int person){
                //n为瓶盖
                //cola可以喝的可乐数,包含买的和换的
                int buyNum=0;//buyNum买的可乐数
                for(int cola=0,n=0;cola<person;cola++){
                        if(n==3){
                                //够了三个瓶盖,瓶盖累计改为1
                                n=1;
                        }
                        else{
                                //不够三个瓶盖,可乐数加1(买的),瓶盖加1
                                buyNum++;
                                n++;
                        }
                        //如果最后累计到了3个瓶盖,还可以换1瓶多余的,没办法,老板不讲理
                }
                return buyNum;
        }
       
       
       
}


1 个回复

倒序浏览
这跟老板没关系吧??规则就是3个可乐瓶盖可以换一瓶可乐。
  1. /*
  2. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?

  3. 思路:
  4. 1,买n瓶,那么有n人喝,还有n个盖子
  5. 2,n个盖子可以换n/3瓶喝,还会有n/3+n%3个盖子 。已经可以n+n/3人喝
  6. 3,剩下的盖子再递归,结束条件是你剩下的盖子不到3个,换不了了就结束。

  7. */

  8. public class Test {

  9.         public static void main(String[] args) {
  10.                 int n = 7;//几人喝
  11.                 mai(n);
  12.         }

  13.         private static void mai(int n) {
  14.                 for(int m=0;;m++){//m代表买几瓶
  15.                         int num=gai(m,m);//调用函数,买了m瓶,所以有m瓶盖,已经够m人喝,递归之后可以算出m瓶够几个人喝
  16.                         if(num>=n){//只要人数大于等于设定的多少人喝即可
  17.                                 System.out.println(m);
  18.                                 break;
  19.                         }
  20.                         
  21.                 }
  22.         }
  23.         
  24.         public static int gai(int a,int b){//a表示瓶盖,b表示已经够多少人喝
  25.                 if(a<3)
  26.                         return b;//盖子少于3个,可以返回几个人喝
  27.                 b=a/3+b;//把盖子拿去换,又有a/3人可以喝,加上之前b人,现在是b+a/3人可以喝
  28.                 a=a/3+a%3;//盖子还来的瓶子,a/3瓶还有a/3盖子,再加上上面没除尽剩下的盖子,就是现在的盖子数
  29.                 return gai(a,b);//递归,传入盖子和已经够喝的人数
  30.                
  31.         }
  32. }
复制代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马