黑马程序员技术交流社区

标题: 黑马测试题,买可乐的那个,大家都是怎么弄的 [打印本页]

作者: 无此姓名    时间: 2014-4-13 19:12
标题: 黑马测试题,买可乐的那个,大家都是怎么弄的
本帖最后由 无此姓名 于 2014-4-13 19:14 编辑
  1. <p>package com.itheima;

  2. public class Test10 {

  3.         /**
  4.          * 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
  5.          */
  6.         public static void main(String[] args) {
  7.                 System.out.println(getCocaNum(28));                //28人需要买19瓶可乐
  8.                 System.out.println(getCocaNum(50));                //50人需要买34瓶可乐
  9.         }
  10.         
  11.         /*
  12.          * 思路:
  13.          *         递增要买可乐的数量,每递增一次,算出总共能换多少瓶可乐,
  14.          *         当可乐的总数量大于等于人数时,返回当前买可乐的数量
  15.          * */
  16.         public static int getCocaNum(int personNum)
  17.         {
  18.                 int cocaToBuy=0,cap,cocaCount;//定义三个变量,代表要买的可乐数量,每次换后剩余瓶盖数量,当前可乐总数量
  19.                 while(true){        
  20.                         ++cocaToBuy;       //开始要买的可乐数量增加一个        
  21.                         cocaCount=cocaToBuy; //换之前可乐的数量
  22.                         cap=cocaToBuy;            //将瓶盖取下,换之前瓶盖的数量=开始买的可乐的数量
  23.                         
  24.                         //在while循环里换可乐,并计算出总共能得到的可乐数量cocaCount
  25.                         while(cap>=3){     //当瓶盖数量小于3时,不可再换,跳出。
  26.                                 cocaCount=cap/3+cocaCount; //换一次,可乐数量增加。</p><p>                                cap=(cap/3+cap%3);   //还剩多少瓶盖呢?
  27.                                 if(cocaCount>=personNum) //判断是否够每人一瓶,
  28.                                         return cocaToBuy;  //返回需要买的可乐数量
  29.                         }
  30.                 }
  31.         }
  32. }
  33. </p>
复制代码


感觉这题很有意思,大家都是怎么写的
作者: jibenwujie    时间: 2014-4-14 00:01
  1. package com.itheima;

  2. /**
  3. * 第十题:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  4. *
  5. *        思路:
  6. *        首先是运算关系,1个可乐就能获得1个瓶盖,3个瓶盖又能获得1个可乐,兑换获得1个可乐的同时又获得了1个瓶盖
  7. *        如果可乐不够人喝,那么就一直加1瓶可乐,直到可乐和兑换到的可乐数大于或等于人数就停止购买。
  8. *        再使用递归运算,直到购买数+兑换数大于等于人数就返回购买了多少瓶可乐
  9. */
  10. public class Test10 {

  11.         private static int COLE = 1;                //购买的可乐数
  12.         private static int EXCHANGE = 0;        //兑换的可乐数
  13.         private static int CAP = 1;                        //当前拥有的瓶盖数
  14.        
  15.         public static int getCole(int peoples) {
  16.                

  17.                 System.out.println("买了可乐:"+COLE +"\t兑换了可乐"+EXCHANGE+"\t当前瓶盖"+ CAP);
  18.                
  19.                 if(COLE + EXCHANGE  < peoples){                //如果可乐不够喝,那么就继续买
  20.                        
  21.                         COLE = COLE + 1;                //再买一个可乐
  22.                         CAP = CAP + 1 ;
  23.                        
  24.                         EXCHANGE  =EXCHANGE + CAP / 3;                //兑换可乐数=当前已兑换的可乐+现有瓶盖的兑换数
  25.                         CAP = (CAP / 3)+(CAP %3);                //当前瓶盖数=兑换了可乐余下的瓶盖+兑换的可乐会产生的瓶盖
  26.                        
  27.                         getCole(peoples);                //递归调用
  28.                 }
  29.                
  30.                 return COLE;
  31.                
  32.         }
  33.        
  34.         public static void main(String[] args) {
  35.                
  36.                 int cole = Test10.getCole(28);
  37.                
  38.                 System.out.println("买的cole数:"+cole);
  39.                
  40.         }

  41. }
复制代码

作者: lwy0319    时间: 2014-4-14 00:46
  1. class Cola{
  2.         public int fun1(int noColaPerson){//定义返回可乐瓶数的方法导入参数需要喝可乐的人,暴力购买法
  3.                 int cap=0;//定义瓶盖
  4.                 int ColaMunber=0;//定义买可乐的数量
  5.                 while(noColaPerson>0){//假如还有人没有可乐
  6.                         ColaMunber++;//买一瓶可乐,购买可乐的瓶数加1
  7.                         noColaPerson--;//又有一个人喝上了可乐
  8.                         cap++;//瓶盖数量加1
  9.                         if(cap==3){//如果瓶盖够三个了
  10.                                 cap=1;//瓶盖数量回到1
  11.                                 noColaPerson--;//又有一个人喝上了可乐
  12.                         }
  13.                 }
  14.                 return ColaMunber;//返回购买可乐的瓶数
  15.         }
  16.         public int fun2(int noColaPerson){//数学方法
  17.                 double ColaMunber=noColaPerson*2/3+1;
  18.                 return (int) ColaMunber;
  19.         }
  20. }
  21. public class Test10{//编写测试类
  22.         public static void main(String[] args){
  23.                 Cola cola=new Cola();
  24.                 System.out.println(cola.fun1(28)+"瓶");//测试28个人
  25.                 System.out.println(cola.fun2(50)+"瓶");//测试50个人
  26.         }        
  27. }
复制代码



作者: 无此姓名    时间: 2014-4-14 02:00
lwy0319 发表于 2014-4-14 00:46

能解释一下数学方法吗
作者: faith    时间: 2014-4-14 08:30
大家都好强啊   有推荐的书籍吗?

作者: lwy0319    时间: 2014-4-14 08:38
无此姓名 发表于 2014-4-14 02:00
能解释一下数学方法吗

∵3盖=1盖+1可乐
∴2盖=1可乐
X=购买数量=初始瓶盖数=初始可乐数
于是X+X/2>=28
∴X>=28*2/3
∵X为整数
∴X=28*2/3向上取整,向上取整有更优化的办法,我没弄,直接+1了,+1会出现不剩瓶盖的前提下多买一瓶。
作者: 杨庆雷    时间: 2014-4-14 10:10
本帖最后由 杨庆雷 于 2014-4-14 10:21 编辑

如果 用空瓶子换饮料喝  那么两个空瓶子就能会多出一瓶饮料(原本有两个瓶子,向老板借一瓶饮料,喝完刚好三个空瓶子,一起给老板,刚好三个空瓶子换一瓶饮料),假设我们买了n品饮料够多少人喝呢  x(人数)=int(n/2+n)
代码:   只需这么几行           public static int method(int n){  //此处x为需要喝饮料的人数
                                                x=int((2/3)*n) +1  ;                                                                                                                     return  x;
                                           }

当 n = 28时   x = int(56/3)+1 = 19
当 n = 50时   x = int(100/3)+1 = 34




作者: 无此姓名    时间: 2014-4-14 21:31
lwy0319 发表于 2014-4-14 08:38
∵3盖=1盖+1可乐
∴2盖=1可乐
X=购买数量=初始瓶盖数=初始可乐数

这个太强了
作者: lwy0319    时间: 2014-4-14 21:37
无此姓名 发表于 2014-4-14 21:31
这个太强了

思考问题的方向不同而已。。毕竟来自经典的逻辑问题。。
作者: Union    时间: 2014-4-17 23:24
学习了!
作者: chensc    时间: 2014-5-1 05:30
学习学习!
作者: 编程学徙    时间: 2014-6-3 02:47
  1. /**
  2. 此程序用以实现可乐问题:n个人去喝可乐,三个瓶盖可以换一瓶可乐,要买多少瓶?
  3. */
  4. import java.util.*;

  5. class KeLe
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 int renShu;                                                                                        //设定人数变量;
  10.                 Scanner in = new Scanner(System.in);
  11.                 System.out.println("请输入人数:");
  12.                 renShu = in.nextInt();
  13.                 int keLe = 0,pingGai = 0,gouMai = 0;                                //三个变量分别统计可乐数、瓶盖数和购买数;
  14.                 while(keLe!=renShu)
  15.                 {
  16.                         //以下if语句块,实现瓶盖换可乐,瓶盖达到3个以后,换到一瓶可乐,瓶盖数也变成1;而购买数不变。
  17.                         if(pingGai==3)                                                                       
  18.                         {
  19.                                 keLe++;
  20.                                 pingGai = 1;
  21.                         }
  22.                         gouMai++;                                                                                //买可乐;
  23.                         keLe++;                                                                                        //买完可乐后,可乐数+1;
  24.                         pingGai++;                                                                                //瓶盖数也+1;       
  25.                        
  26.                 }
  27.                 System.out.println("共要买可乐"+gouMai+"瓶!");
  28.         }
  29. }
复制代码

作者: 倪大大    时间: 2014-6-19 21:51
才做完这个题..
* 28个人连续买可乐,每瓶可乐产生一个瓶盖
         * 每个人在买可乐之前都判断现有瓶盖是否满足3个,如果满足 则换购一瓶,不需要买,
         * 然后将瓶盖数置为1(因为没三个瓶盖就能换购一瓶,所以瓶盖数最多为3,然后换购的可乐又产生一个瓶盖),
         * 如果不满足则买一瓶可乐,然后瓶盖数+1;
         * */
        public static void main(String[] args) {
                System.out.println(coke(28));//28人需要买29瓶
                System.out.println(coke(50));//50人需要买34瓶

        }
        public static int coke(int peopleNumber)
        {
                int buyCoke = 0; //定义一个变量来存储买的可乐数
                int bottle = 0; //定义一个变量来存储已有瓶盖数
               
                for(int i = 1 ; i <= peopleNumber ; i++)
                {
                        if(bottle<3)
                        {
                                buyCoke++;//3
                                bottle++;//
                        }
                        else
                        {
                                bottle=1;  //满足瓶盖等于3后,就换购一瓶可乐,然后又产生一个瓶盖
                        }       
                }
                return buyCoke;
作者: 倪大大    时间: 2014-6-19 21:58
杨庆雷 发表于 2014-4-14 10:10
如果 用空瓶子换饮料喝  那么两个空瓶子就能会多出一瓶饮料(原本有两个瓶子,向老板借一瓶饮料,喝完刚好三个 ...

你这思想做不对吧, 你这个就可以等同于 3个人一组,一组只用买两瓶, 需要的瓶数就是 (人数/3)*2+人数%3;
   当有30个人的时候 你这个只需要买20瓶
  但是题目来说 需要21瓶
作者: 安茹黑马    时间: 2014-8-2 16:57
编程学徙 发表于 2014-6-3 02:47

太赞了,代码简单而且好理解
作者: ﹑淼    时间: 2014-8-27 09:35
谢谢你的帖子。
作者: ﹑淼    时间: 2014-8-27 10:07
lwy0319 发表于 2014-4-14 00:46

你的方法最好理解

作者: ﹑淼    时间: 2014-8-27 10:26
lwy0319 发表于 2014-4-14 08:38
∵3盖=1盖+1可乐
∴2盖=1可乐
X=购买数量=初始瓶盖数=初始可乐数

很吊,两个方法都看懂了
作者: 28了还能学吗    时间: 2014-8-28 13:41
好强悍  楼上的
作者: 高速度    时间: 2014-9-4 00:21
谢谢分享。。
作者: 柳超    时间: 2014-9-5 00:28
杨庆雷 发表于 2014-4-14 10:10
如果 用空瓶子换饮料喝  那么两个空瓶子就能会多出一瓶饮料(原本有两个瓶子,向老板借一瓶饮料,喝完刚好三个 ...

这思路,我去绝了!但是就不知道老板会不会借给你
作者: 刘瑞    时间: 2014-9-15 20:49
倪大大 发表于 2014-6-19 21:51
才做完这个题..
* 28个人连续买可乐,每瓶可乐产生一个瓶盖
         * 每个人在买可乐之前都判断现有瓶盖是否满足 ...

啥玩意啊 我去 代码不全?
作者: 十万一千    时间: 2014-10-8 22:57
安茹黑马 发表于 2014-8-2 16:57
太赞了,代码简单而且好理解

http://bbs.itheima.com/forum.php ... p;extra=#pid1020922
我刚刚学习过的一个,感觉还可以...
作者: 杰克船长    时间: 2014-10-16 11:12
我觉得这个题是有个bug的,按照生活逻辑来生成数学逻辑是不合理的,如果我是老板,你给我两瓶盖,我是不借给你第三个瓶盖的,按照小学数奥,为了发散思维,是可以借的。但是数学逻辑结构应该严谨。没有借不借的可能性,只有不借。如果我做这题我会先把判断逻辑确定了再写,当然也可以分两种方式来写,假设以3个盖换一瓶为准,给我俩盖不借第三瓶。会出现9个人得买7瓶,10个人还得买7瓶的现象,但是这更符合生活逻辑,毕竟规则是三个瓶盖换一瓶,而不是两个瓶盖换一瓶。
作者: mengzi987    时间: 2014-10-23 17:08
倪大大 发表于 2014-6-19 21:51
才做完这个题..
* 28个人连续买可乐,每瓶可乐产生一个瓶盖
         * 每个人在买可乐之前都判断现有瓶盖是否满足 ...

这种做法感觉很简洁易懂:handshake
作者: hj447842687    时间: 2014-11-9 00:45
杨庆雷 发表于 2014-4-14 10:10
如果 用空瓶子换饮料喝  那么两个空瓶子就能会多出一瓶饮料(原本有两个瓶子,向老板借一瓶饮料,喝完刚好三个 ...

应该为x=int((2/3)*(n-1)) +1

   1+x+x/2=n  --->x+x/2=n-1
作者: hj447842687    时间: 2014-11-9 00:47
倪大大 发表于 2014-6-19 21:58
你这思想做不对吧, 你这个就可以等同于 3个人一组,一组只用买两瓶, 需要的瓶数就是 (人数/3)*2+人数%3;
  ...

他忘了总数已经买了一瓶了

应该为x=int((2/3)*(n-1)) +1

   1+x+x/2=n  --->x+x/2=n-1
作者: hj447842687    时间: 2014-11-9 01:26
杰克船长 发表于 2014-10-16 11:12
我觉得这个题是有个bug的,按照生活逻辑来生成数学逻辑是不合理的,如果我是老板,你给我两瓶盖,我是不借 ...

瓶盖不是借的      是换来的可乐的瓶盖      买2瓶+前面换的可乐的盖子=1可乐+盖子   循环下去
作者: Jayshun    时间: 2014-11-10 13:46
哈哈编程真是是比较有意识
作者: 各有千秋    时间: 2014-11-12 16:05
谢谢分享!
作者: Termy    时间: 2014-11-28 10:10
  1. /*
  2. 23、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?
  3.         (需写出分析思路)
  4. 思路:
  5.         3个盖子换一瓶,相当于2个盖子换一瓶没有盖子的,设需要买x瓶可乐,既x+x/2≥28,既x≥56/3,取整,得x=19。
  6.         但存在一用情况:最后只剩两个盖子,是换不了可乐的,所以要求x+x/2>28,没有等于。

  7. */
  8. class Test23
  9. {
  10.         public static void main(String[] args)
  11.         {
  12.                 int nPerson=50;
  13.                 int nCaloNum;
  14.                 if(nPerson>3)
  15.                 {
  16.                         nCaloNum=(nPerson*2)/3+1;
  17.                         System.out.println("需要购买瓶数:"+nCaloNum);
  18.                 }
  19.                 else
  20.                 {
  21.                         nCaloNum=nPerson;
  22.                         System.out.println("需要购买瓶数:"+nCaloNum);
  23.                 }
  24.                
  25.         }
  26. }
复制代码

作者: Termy    时间: 2014-11-28 10:12
Termy 发表于 2014-11-28 10:10

各位请上眼~
作者: hanjun    时间: 2015-1-16 01:55
刚看了这道题,借鉴一下
作者: 斷灬dian    时间: 2015-4-5 22:58
学习学习!
作者: One_M    时间: 2015-4-6 00:06
/*
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

*/

import java.util.Scanner;// 导包;
class  Kele
{
        public static void main(String[] args)
        {
                Scanner sc = new Scanner(System.in);//使用键盘录入法
                System.out.print("请输入人数:");
                int a = sc.nextInt();//调用方法获取int类型数据
               
                buyCoke(a);
        }
        public static void buyCoke(int a)
        {
               
                int coke=0;// 可乐兑换总数
                int sum=0;//可乐兑换和购买总数
                int x=1;//购买可乐数
                String m;//定义 String 类型变量m,接收字符串数据。
                for(;x<=a;x++)//遍历1~50个人数
                {
                        if (x==3)// 由于三瓶可换一瓶,第一瓶兑换需要三个盖子,后面每买两瓶就能换一个(兑换后瓶盖+1)
                        {
                                coke++;//兑换可乐数+1
                        }
                        else if (x>3 & (x-3)%2==0)//当x>3时(第一瓶兑换过后),每买两瓶换一个(即 (x-3)%2==0) 这时可乐兑换数+1
                        {
                                coke++;
                        }
                sum=coke+x;// 用 sum 记录所买可乐瓶数和所换的可乐瓶数的总和;
                        if (sum>=a)// 当可乐的总瓶数满足总人数时(即 sum>=50)跳出循环体
                                break;
                }
                m="所需购买可乐瓶数为:";
                System.out.println(m+x);//输出可乐所购买的瓶数 x ;
        }
}
作者: 穆顺涛    时间: 2015-5-2 23:07
编程学徙 发表于 2014-6-3 02:47

这个方法还是不对,当人数为3,6,9。。时都不对
作者: RockLee    时间: 2015-6-21 10:07
谢谢分享
作者: RockLee    时间: 2015-6-21 12:47
/*
* 需求: 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
* 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
* 思路:1,这个程序最重要的是分清可乐的瓶数和人数的关系,要求可乐的瓶数与人数的关系是相等的。
*                 2,可乐的瓶数来自于购买的可乐,和喝下可乐留下的盖子3换1获得的。
* 步骤:1,从键盘输入要喝可乐的人数。
*                 2,设置一个While循环里面有三个变量gouMai代表买的可乐数,pingGai代表瓶盖数,keLe代表可乐的总数。
*       当购买一瓶,gouMai++,pingGai++,keLe++。
*      3,当pingGai的个数达到3的倍数的时候换取一个可乐,keLe++,把瓶盖数置为1
*      4,需要注意一点,因为在进行一次循环的过程中,keLe++可能进行两次所以我们在进行每次keLe++的时候判断它是否和人数相等。
*/

package com.itheima;
import java.util.Scanner;

public class Test10 {
        public static void main(String[] args) {
                 Scanner input = null; //键盘录入
                 
                 try{
                         input = new Scanner(System.in);
                         System.out.println("请输入有多少个人喝可乐:");
                         
                        int renShu = input.nextInt();
                        int num =keleNum(renShu);
                         System.out.println("需要"+num+"瓶可乐才够"+renShu+"个人喝");
                 }catch(Exception e) {
                         System.out.println("输入非法,请输入数字");
                 }
                 finally
         {
                 try
                 {
                         if (input != null)
                                 input.close();
                 } catch (Exception e2)
                 {
                         System.out.println("关闭流失败");  
                 }
         }
        }
       
        private static int keleNum(int i) {
                // TODO Auto-generated method stub
                 
                 int keLe = 0,pingGai = 0,gouMai = 0;
                 while (keLe!= i) {
                       
                       
                        gouMai ++;
                        keLe++;
                        if(keLe == i)
                                break;
                        pingGai++;
                        if(pingGai%3==0){
                                pingGai = 1;
                                keLe++;
                                if(keLe == i)
                                        break;
                        }
                }
                 
                return gouMai;
        }

}


参考了楼上的一个小程序,并修复了其中一个Bug。参见步骤三的注意。
作者: 梁思宇    时间: 2015-6-29 18:01
  1. package test;

  2. /*
  3. * 3个瓶盖换一个可乐,多个人喝,需要买多少够喝.
  4. */
  5. public class Test010 {
  6.         public static void main(String[] args) {
  7.                 int man = 50;// 定义人数
  8.                 int pinggai = 0;// 定义已有瓶盖的数量;
  9.                 jisuankele(man,pinggai);
  10.         }

  11.         public static void jisuankele(int man,int pinggai) {
  12.                 // 已知人数,求需要买多少瓶可乐
  13.                 int sum = 0;// 定义sum变量,为最终喝到的可乐的数量
  14.                 int min = 0;// 定义最少需要购买的可乐数量.
  15.                 for (int x = 0; sum < man; x++) {
  16.                         // 循环遍历,x为购买的可乐的数量,当最终喝到的可乐数量大于等于人数的时候结束循环
  17.                         sum = jisuan(x, pinggai);// 调用方法,当购买x瓶的时候,最终喝到sum瓶.第二的参数为手里的瓶盖数量
  18.                         min = x;// 返回喝到可乐的数量的同时,也返回购买的可乐的数量
  19.                 }
  20.                 System.out.println("需要购买" + min + "瓶可乐,才够" + man + "人喝~");

  21.         }

  22.         public static int jiaohuan(int pinggai) {
  23.                 // 设置一个方法,已知瓶盖数量,返回交换到的可乐数量
  24.                 return pinggai / 3;
  25.         }

  26.         public static int jisuan(int kele, int shengyu) {
  27.                 // 设置方法,已知购买可乐数量,和已有的瓶盖数量,得到最终喝到的可乐数量.
  28.                 int sum = 0;// 设置一个变量,存储最后喝到的可乐数量.
  29.                 if (kele < 0) {
  30.                         return -1;// 如果可乐数量小于0,返回-1.
  31.                 } else if ((kele + shengyu) >= 3) {
  32.                         // 如果可乐加瓶盖数量大于等于3,就可以用正常方式换得可乐,调用交换方法.
  33.                         // 喝到的可乐的数量,等于可乐的数量加上通过交换最终喝到的可乐的数量.
  34.                         // 用来交换的瓶盖,等于喝剩下的瓶盖,和上一次交换剩下的瓶盖.
  35.                         int i = (kele + shengyu) % 3;// 定义变量存储这次交换,将会剩余瓶盖数量
  36.                         sum = kele + jisuan(jiaohuan(kele + shengyu), i);
  37.                 } else if ((kele + shengyu) == 2) {
  38.                         // 当喝完可乐,手里瓶盖数量等于2的时候,可以赊账,赊一个瓶盖,先换回一瓶,喝完后再还回瓶盖,这样可以多喝1瓶.
  39.                         sum = kele + 1;
  40.                 } else if ((kele + shengyu) == 1 || (kele + shengyu) == 0) {
  41.                         // 当喝完后瓶盖数量等于0或者等于1的时候,没有办法交换,只能买几瓶就喝几瓶..
  42.                         sum = kele;
  43.                 }
  44.                 // 其他情况,返回sum.
  45.                 return sum;
  46.         }
  47. }
复制代码



作者: 发抖的_DtYJA    时间: 2015-7-21 00:23
好牛逼啊!

作者: ssqtom    时间: 2015-7-30 11:16
我脑子有点糊了。
作者: shdosh    时间: 2015-8-19 00:22
本人的解决办法请笑纳。
  1. import java.io.*;
  2. class CocaCola
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {

  6.                 //调用读键盘函数读取输入的人数,并调用获取要买可乐的数量。
  7.                 readKey();
  8.                

  9.         }
  10.         public static void readKey()throws IOException{
  11.                 BufferedReader bufIn = new BufferedReader(new InputStreamReader(System.in));

  12.                 String str = null;
  13.                 while((str = bufIn.readLine())!=null){
  14.                         if(str.equals("over")){
  15.                                 break;
  16.                         }
  17.                         int colaNum = getColaNum(Integer.parseInt(str));

  18.                         System.out.println("需要买几瓶呢?== " + colaNum);
  19.                 }
  20.         }
  21.         public static int getColaNum(int person){
  22.                 //在人手中的盖子数。
  23.                 int cap = 0;
  24.                 //可乐数。
  25.                 int bottle = 0;
  26.                 //花钱买的可乐瓶数。
  27.                 int colaNum =0;
  28.                 //最终的可乐数为person人数或者person人数加1。
  29.                 //因为如果出现瓶数比人数多1瓶以上就意味着,人们手中同时有6个瓶盖,按3个瓶盖一瓶饮料算,人们手中的瓶盖数只能是0,1,2.
  30.                 while(bottle<person){
  31.                                 //开始是0,先买。
  32.                                 cap++;
  33.                                 bottle++;
  34.                                 colaNum++;
  35.                                 System.out.println("买后:"+"cap==" + cap + "bottle==" + bottle + "colaNum==" + colaNum);
  36.                         if(!(cap>=0 && cap<3)){
  37.                                 System.out.println("买后瓶盖数超过2个:"+"cap==" + cap + "bottle==" + bottle + "colaNum==" + colaNum);
  38.                                 cap=1;
  39.                                 bottle++;
  40.                                 System.out.println("换取后:"+"cap==" + cap + "bottle==" + bottle + "colaNum==" + colaNum);
  41.                         }               
  42.                 }
  43.                 return colaNum;
  44.         }
  45. }
复制代码

作者: zengly    时间: 2015-8-21 21:05
public class Test3 {
        public static void main(String[] args)
        {
                int count = 3;
                int n = 1;
                while(count+n != 28)
                {
                        count += 2;
                        n++;
                }
                System.out.println(count);
        }
}
只不过28用这个方法可以求得出来,换成50就错了。请问有大神知道为什么吗
作者: 青春无敌美少年    时间: 2015-11-7 22:55
编程学徙 发表于 2014-6-3 02:47

eclipse中运行结果有误
具体如下

请输入人数:
28
共要买可乐-1431655746瓶!
作者: Juice.cy.wang    时间: 2015-11-23 15:51
太屌了,感觉好伤脑细胞啊
作者: sunpeijie    时间: 2015-12-24 20:55
好高深的样子  我一定要弄懂
作者: sun288225    时间: 2016-2-14 17:02
/*28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
* 思路:简单的数学计算题:1瓶可乐=1水+1盖子;3盖子=1瓶可乐;那么1水=2盖子;28人喝28水,需要56个盖子;
* 所以需要56/3=大约买19瓶可乐,50人同理;
*/
public class TextScanner {
        public static void main(String[] args) {
                Scanner input = new Scanner(System.in);
                System.out.println("请输入人数");
                double p = input.nextDouble();

                System.out.println("需要购买可乐瓶数:" + Math.ceil((2 * p) / 3));
        }
}
作者: cuiwenle    时间: 2016-3-26 23:27
这是用递归做的吧
作者: 青争心    时间: 2016-4-3 20:44
倪大大 发表于 2014-6-19 21:58
你这思想做不对吧, 你这个就可以等同于 3个人一组,一组只用买两瓶, 需要的瓶数就是 (人数/3)*2+人数%3;
  ...

你算算 19瓶酒满足 了
作者: 某某帅    时间: 2016-4-7 15:11
太mtd屌了
作者: y506798278    时间: 2016-7-9 11:42
顶一个,挺好的




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