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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

// 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,
//那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

//分析思路:1.首先定义一个28人喝就买28瓶,28人一共可以喝多少瓶的方法;
        // 2.一共喝的瓶数始终应该大于买的瓶数;
        // 3.逆向判断:当一共喝的瓶数大于人数,就少买一瓶。依次递减。
        // 4.当num递减到一共喝的瓶数等于人数的时候,返回num,就是应该买的瓶数。
public class Test_10 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
    //测试:
    System.out.println(castCont(28));

        }
        //定义一个当一共喝的瓶数大于人数的时候,买的就依次递减一瓶。
        public  static int castCont(int num){
                int key=num;
                while((subCont(num))>key){
                        num--;
                        }
                return num;
        }
        //定义一个可以求出,有多少人就买多少瓶,一共喝多少瓶的方法,
        public  static int subCont(int num){
                //int num;
                 int key=num;
                 int bubian=num;
                 int sum = 0;
                 int sub=0;
                 while((num/3)!=0){
                         key=num/3;
                         num=((num/3)+(num%3));//瓶子盖数
                         
                         sum+=key;//瓶子盖可以换的瓶数,
                         sub=sum+bubian;//一共喝的瓶数
                         
                        }
                 return sub;
        }

}

9 个回复

倒序浏览
本帖最后由 911趣购 于 2014-3-31 00:21 编辑


我也是参考了别人的才弄出来的  这个给你参考参考 哦

  1. package itheima;
  2. /*
  3. 题目:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  4.          假如是50人,又需要买多少瓶可乐?(需写出分析思路)

  5.         思路:
  6.                 当拿3个可乐瓶盖去换一瓶可乐,就多了一瓶可乐同时又多了一个瓶盖。(即三个可乐瓶可以换1瓶可乐和一个瓶盖)
  7.                 再买两瓶可乐,拿3个可乐瓶盖去换取一瓶可乐同时多了一个瓶盖。
  8.                 循环...直到所有人都能喝到一瓶可乐为止。
  9.         步骤:
  10.                 //定义一个获取可乐瓶数的方法,传入人数
  11.                 1. public static int colaCount(int num);
  12.                 //通过上面的分析,开始计算需要的可乐数目。
  13.                 2. for(int i=0;i<num;i++){  
  14.                                 if(pg==3){
  15.                                         pg = 1;
  16.                                 }  
  17.                                 else{  
  18.                                           sum++;
  19.                                           pg++;
  20.                                 }
  21.                         }
  22. */
  23. public class Test1 {
  24.         
  25.         public static void main(String[] args) {  
  26.                
  27.                 System.out.println("28人喝可乐,需要购买:"+colaCount(28)+"瓶可乐");
  28.                
  29.                 System.out.println("50人喝可乐,需要购买:"+colaCount(50)+"瓶可乐");     
  30.         }  
  31.         //购买可乐方法  
  32.         public static int colaCount(int num){  
  33.                 //瓶盖数  
  34.                 int pg = 0;  
  35.                 //需要购买瓶数  
  36.                 int sum = 0;  
  37.                 for(int i=0;i<num;i++){
  38.                         if(pg==3){
  39.                                 //3个瓶盖可以换1瓶可乐和一个瓶盖
  40.                                 pg = 1;
  41.                         }  
  42.                         else {
  43.                                 //购买一瓶  
  44.                                 sum++;  
  45.                                 //同时多一个可乐瓶
  46.                                 pg++;
  47.                         }  
  48.                 }
  49.                 //返回需要购买的瓶数
  50.                 return sum;  
  51.         }
  52. }

复制代码
回复 使用道具 举报
大哥他是要用递归的方式啊!这道入学测试题我做过思想也理清楚过。我去做一下嘻嘻
回复 使用道具 举报
觉得自己得方法太逊了,纯算术的。递归总是用不好
回复 使用道具 举报
  1.         public int func(int pnum ,int dnum) {
  2.                 dnum=dnum/3+dnum;
  3.         if(pnum==dnum)
  4.                 return dnum;
  5.                        
  6.                         return        func(pnum, --dnum);
  7.                        
  8.                
  9.        
  10.                
  11.         }
复制代码
回复 使用道具 举报
求给分,呵呵 pnum人数,dnum可乐数,默认人数和可乐数相同
回复 使用道具 举报

谢谢。。。。。。。。。。。。。
回复 使用道具 举报
  1.         public static int fun(int pnum ,int dnum) {
  2.                 int ndnum=dnum/3+dnum;
  3.         if(pnum==ndnum)
  4.                 return dnum;
  5.                        
  6.                         return        fun(pnum, --dnum);
  7.                         }
复制代码
错了,这个是对的,里面有个ndnum这个参数是实际的可乐瓶数
回复 使用道具 举报
:'(哥们真牛逼
回复 使用道具 举报
给力啊。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马