黑马程序员技术交流社区

标题: 求大神解答 [打印本页]

作者: 15266913109    时间: 2016-6-14 22:18
标题: 求大神解答
本帖最后由 15266913109 于 2016-6-14 22:26 编辑

求大神啊,不会呀,速来孙大圣!!!!


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


作者: zxjuzhu    时间: 2016-6-14 22:18
楼主,这是一道经典测试题,下面给你结题思路和代码,然后给你共享下一些经典测试题,学习一下,好好努力吧。

经典测试题:链接:http://pan.baidu.com/s/1boW5wfX 密码:c4p5

思路:
                当拿3个可乐瓶盖去换一瓶可乐,就多了一瓶可乐同时又多了一个瓶盖。(即三个可乐瓶可以换1瓶可乐和一个瓶盖)
                再买两瓶可乐,拿3个可乐瓶盖去换取一瓶可乐同时多了一个瓶盖。
                循环...直到所有人都能喝到一瓶可乐为止。
      我的步骤:
                //定义一个获取可乐瓶数的方法,传入人数
                1. public static int countCokes(int num);
                //通过上面的分析,开始计算需要的可乐数目。
                2. for(int i=0;i<num;i++){  
                                if(cap==3){
                                        cap = 1;
                                }else{  
                                          sum++;
                                          cap++;
                                }
                        }





public class Test10 {

    public static void main(String[] args) {  
               
                System.out.println("28人喝可乐,需要购买----"+countCola(28)+"瓶可乐");
               
                System.out.println("50人喝可乐,需要购买----"+countCola(50)+"瓶可乐");     
        }
   
        //购买可乐方法  
        public static int countCola(int num){  //传入要喝的人的数量
                //瓶盖数  
                int cap = 0;  
                //我们需要购买瓶数  
                int sum = 0;  
                for(int i=0;i<num;i++){
                        if(cap==3){
                                //每当3个瓶盖可以换1瓶可乐和一个瓶盖
                                cap = 1;
                        }else {
                                //我们购买一瓶  
                                sum++;  
                                //同时多一个可乐瓶
                                cap++;
                        }  
                }
       
                //返回需要购买的瓶数
                return sum;  
        }

}
楼主大哥,赏我几分吧!
作者: hubei3805979    时间: 2016-6-15 00:32
<p>package com.itheima;

public class Test10 {

        /**
         * 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
         */
        public static void main(String[] args) {
                System.out.println(getCocaNum(28));                //28人需要买19瓶可乐
                System.out.println(getCocaNum(50));                //50人需要买34瓶可乐
        }
        
        /*
         * 思路:
         *         递增要买可乐的数量,每递增一次,算出总共能换多少瓶可乐,
         *         当可乐的总数量大于等于人数时,返回当前买可乐的数量
         * */
        public static int getCocaNum(int personNum)
        {
                int cocaToBuy=0,cap,cocaCount;//定义三个变量,代表要买的可乐数量,每次换后剩余瓶盖数量,当前可乐总数量
                while(true){        
                        ++cocaToBuy;       //开始要买的可乐数量增加一个        
                        cocaCount=cocaToBuy; //换之前可乐的数量
                        cap=cocaToBuy;            //将瓶盖取下,换之前瓶盖的数量=开始买的可乐的数量
                        
                        //在while循环里换可乐,并计算出总共能得到的可乐数量cocaCount
                        while(cap>=3){     //当瓶盖数量小于3时,不可再换,跳出。
                                cocaCount=cap/3+cocaCount; //换一次,可乐数量增加。</p><p>                                cap=(cap/3+cap%3);   //还剩多少瓶盖呢?
                                if(cocaCount>=personNum) //判断是否够每人一瓶,
                                        return cocaToBuy;  //返回需要买的可乐数量
                        }
                }
        }
}
</p>
作者: 虫小三    时间: 2016-6-15 10:28
/*先用数学的解题思维试下         x÷3+x=28;x÷3+x=50.                 x=21;        x=38(约数)         */代码我再调试一下,好像我的哪里装逼失败了~
作者: luojie140    时间: 2016-6-15 13:35
class Kele{
        public void count(){
                Scanner scanner =new Scanner(System.in);
                int p;//人数
                p=scanner.nextInt();
                int a=0;//实际购买的可乐瓶数
                int b=0;//实际得到的可乐瓶数
                int i=0;//当前可乐瓶盖数
                for(int k=0;k<=p;k++){
                        a++;
                        b++;
                    i++;
                    if(i==3){
                            b++;//当瓶盖达到3个时可换一瓶可乐,所以实际得到的可乐瓶数加一
                            i=1;//用3个瓶盖换一瓶可乐,现在就只有换的那瓶可乐的瓶盖了
                    }
                    if(b>=p){//当实际得到的可乐瓶数大于等于人数时就输出实际购买的数量并跳出
                            System.out.println(a);
                            break;
                           
                    }
                    
                }
               
        }
}

作者: luojie140    时间: 2016-6-15 13:38
luojie140 发表于 2016-6-15 13:35
class Kele{
        public void count(){
                Scanner scanner =new Scanner(System.in);

不知道你楼主看懂了没,就是每当有三个瓶盖时就换一瓶可乐,这样依次循环,当可乐数大于等于人数时就跳出循环
作者: 15603757970    时间: 2016-6-15 14:12
楼主,这是一到测试题啊!答案如下:
package com.itheima;
/*10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
(需写出分析思路)
*/
/*分析思路:定义一个变量为瓶盖数初始为0,当瓶盖数没到3时就继续买可乐,瓶盖数加1;
                        到达3时就把瓶盖数置为1,不再买可乐;循环28次,可以让28人都可以喝到可乐,50人同理循环50次。           
*/
public class Test10 {

        public static void main(String[] args){
                System.out.println("要买"+buyCoke(28)+"瓶可乐够28人喝。");
                System.out.println("要买"+buyCoke(50)+"瓶可乐够50人喝。");
        }
        public static int buyCoke(int num){
                int bottleCap = 0;//定义瓶盖数初值
                int sumCap = 0;//定义可乐总瓶数初值
                //3个瓶盖换一个瓶盖,循环人数次
                for(int x=0;x<num;x++){
                        if(bottleCap!=3){ //瓶盖不满3则继续买可乐,可乐和瓶盖都叠加
                                bottleCap++;
                                sumCap++;
                        }else if(bottleCap==3){ //瓶盖满3则换一瓶可乐,瓶盖数置为1
                                bottleCap=1;
                        }
                }//返回可乐总瓶数
                return sumCap;
        }
}

作者: 15266913109    时间: 2016-6-15 19:29
zxjuzhu 发表于 2016-6-15 19:15
楼主,这是一道经典测试题,下面给你结题思路和代码,然后给你共享下一些经典测试题,学习一下,好好努力吧 ...

谢了哈,正需要呢
作者: 15266913109    时间: 2016-6-15 19:31
hubei3805979 发表于 2016-6-15 00:32
package com.itheima;

public class Test10 {

谢了哈兄弟,找到那文件了...
作者: 15266913109    时间: 2016-6-15 20:43
luojie140 发表于 2016-6-15 13:38
不知道你楼主看懂了没,就是每当有三个瓶盖时就换一瓶可乐,这样依次循环,当可乐数大于等于人数时就跳出 ...

谢了哈,找到了
作者: aizengk    时间: 2016-6-24 16:35
来长见识~~~~




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