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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 玥夜 中级黑马   /  2014-8-31 10:19  /  2308 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 玥夜 于 2014-8-31 13:26 编辑
  1. 有更简单的方法么<div class="blockcode"><blockquote>package com.itheima;
  2. /**
  3. * 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,
  4. * 够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  5. *
  6. * */
  7. public class coke
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 int i= 23;
  12.                 System.out.println(buy(i));
  13.                 System.out.println(buy2(i));
  14.         }
  15.         private static int buy(int i)//记录瓶子的个数
  16.         {
  17.                 int count= 0;//控制是不是有三个瓶子盖
  18.                 int num= 0;//控制总共需要多少瓶coke
  19.                 int temp= 0;//记录总共买了多少次,每次买2瓶coke

  20.                 for(;num<=i;num++)
  21.                 {
  22.                         count++;
  23.                         if(count==3)
  24.                         {
  25.                                 count= 1;        
  26.                                 num++;
  27.                                 temp++;        
  28.                         }
  29.                 }
  30.                 if(count!=1)
  31.                         return temp= temp*2+1;
  32.                 return temp*2;
  33.                
  34.         }
  35.         
  36.         static int count= 0;
  37.         private static int buy2(int i)//递归人的个数
  38.         {
  39.                 if(i>= 0)//如果有人没有coke就继续买
  40.                 {
  41.                         count++;
  42.                         if((count%2)!=0)//如果不够两个个瓶子盖 就给一个人买一瓶coke,人数减一
  43.                                 buy2(i-1);
  44.                         else                //如果是两个瓶子盖  就给一个人买一瓶coke,并兑换一瓶coke,人数减二
  45.                                 buy2(i-2);               
  46.                 }
  47.                 return count;
  48.         }

  49. }
复制代码



21 个回复

倒序浏览

public class Test11 {
        public static void main(String[] args) {
                method(30);
        }
        public static void method(int x) {
                int count = 0;
                for (int i = 1; i <= x; i++) {
                        if (i%3!=0) {
                                count++;
                        }
                }
                if (x%3==0)
                        System.out.println(x+"个人需要买"+(count+1)+"瓶coca");
                else
                        System.out.println(x+"个人需要买"+count+"瓶coca");
        }
}
回复 使用道具 举报
手里会有1/2/3个瓶盖,瓶盖为3时下一个人不用买,直接换
回复 使用道具 举报
我的思路就是前面有三个人系一个就不用买了 也就是逢3count不用加。
回复 使用道具 举报
左脑想你 发表于 2014-8-31 11:01
我的思路就是前面有三个人系一个就不用买了 也就是逢3count不用加。

那你说三个人买几瓶合适呢  我觉得买两瓶就哦了
回复 使用道具 举报
玥夜 发表于 2014-8-31 12:55
那你说三个人买几瓶合适呢  我觉得买两瓶就哦了

你是说第三瓶先赊一个,然后还三个瓶盖吗?这在生活中明明就是不合适的。如果你要是想那么干我的代码只需要把输出语句中的if删除即可
回复 使用道具 举报
mark。
稍后我发我的地址
http://bbs.itheima.com/thread-138545-1-1.html
.
我刚开始思考3.但是最后改为2。。(其实表达这句话,中间省略了N字。)
回复 使用道具 举报
Imp_x 高级黑马 2014-8-31 14:49:29
8#
左脑想你 发表于 2014-8-31 13:41
你是说第三瓶先赊一个,然后还三个瓶盖吗?这在生活中明明就是不合适的。如果你要是想那么干我的代码只需 ...

我也觉得2就可以了= =两个瓶子 先赊一个 喝完再还  可以有啊→_→
回复 使用道具 举报
Imp_x 发表于 2014-8-31 14:49
我也觉得2就可以了= =两个瓶子 先赊一个 喝完再还  可以有啊→_→

赊一个:L真逗
回复 使用道具 举报
Imp_x 高级黑马 2014-8-31 14:53:55
10#

为何不行,死脑袋?就不会转换一下- -要是你这样做生意相信会破产- -
回复 使用道具 举报
Imp_x 发表于 2014-8-31 14:53
为何不行,死脑袋?就不会转换一下- -要是你这样做生意相信会破产- -

public class Test11 {
        public static void main(String[] args) {
                method(27);
        }
        public static void method(int x) {
                int count = 0;
                for (int i = 1; i <= x; i++) {
                        if ((i)%3!=0) {
                                count++;
                        }
                }
                System.out.println(x+"个人需要买"+count+"瓶coca");
        }
}
回复 使用道具 举报
Imp_x 发表于 2014-8-31 14:53
为何不行,死脑袋?就不会转换一下- -要是你这样做生意相信会破产- -

上面的代码满足你赊一个的要求。。。。。。
回复 使用道具 举报
  哦哦。我也去试试看写不写的出来。。
回复 使用道具 举报
Imp_x 发表于 2014-8-31 14:53
为何不行,死脑袋?就不会转换一下- -要是你这样做生意相信会破产- -

生意满分,答题0分;P
回复 使用道具 举报
LFW 中级黑马 2014-8-31 19:25:17
15#
怀念黑海岸 发表于 2014-8-31 16:26
哦哦。我也去试试看写不写的出来。。

我记得之前的帖子上你都发过言了。。。顺便》》》》3支可乐=3(瓶+盖),3盖=1(瓶+盖)。题目没有说可以赊盖子,不要想太多。但是要记得换来的可乐依旧是有盖的。之前有帖子,大神们都讨论过了,可以去看看。
回复 使用道具 举报
LFW 发表于 2014-8-31 19:25
我记得之前的帖子上你都发过言了。。。顺便》》》》3支可乐=3(瓶+盖),3盖=1(瓶+盖)。题目没有说可以 ...

   其实这个不是关键,一个瓶子对应一个盖子嘛,所以他的核心公式应该是:人数<=买的可乐+换的可乐。在换的可乐中只要满足>=3,那么就继续兑换直到不满足这个条件为止,我去写写看。
回复 使用道具 举报
z-翔 中级黑马 2014-8-31 21:38:20
17#
public class Cola
{
        public static void main(String[] args)
        {
                int i=0,j=0,k=0;//设i为买的可乐数,j为瓶盖换的可乐数,k为瓶盖数
                for(;;i++,k++)
                {
                        //每当攒够三个瓶盖就去换一瓶可乐
                        if(k/3==1)
                        {
                                j++;
                                k=k-3+1;//因为换了一瓶可乐,减三个瓶盖再加上一个换回来的可乐的瓶盖
                        }
                        //当买的可乐数和用瓶盖换的可乐数相加等于28时,程序结束
                        if(i+j==28)
                                break;                       
                }
                System.out.println(i);
        }
}


回复 使用道具 举报
  1. class coca
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int k=method(3);
  6.                 System.out.println(k);
  7.         }
  8.         public static int method(int num)
  9.         {
  10.                 int cap=0,bottle=0,coca=0;//cap:拥有的瓶盖数;bottle:购买的瓶数;coca:实际可以喝的可乐瓶数。
  11.                 while (coca<num)
  12.                 {
  13.                         bottle++;
  14.                         cap++;
  15.                         coca++;
  16.                         if(cap==3)//条件是cap==3时是不可以借瓶盖的情况。
  17.                         {
  18.                                 coca++;
  19.                                 cap=1;
  20.                         }
  21.                         /*
  22.                         if(cap==2)//这是可以借瓶盖的情况。
  23.                         {
  24.                                 coca++;
  25.                                 cap=0;
  26.                         }
  27.                         */

  28.                 }
  29.                 return bottle;
  30.                
  31.         }
  32. }
复制代码

如果可以借瓶盖那就很简单了,不用循环就可以。你每买两瓶可乐就借一次,喝完后就还掉,就相当于买两瓶可以喝3瓶,这样的话,直接用 num/3*2+num%3  就行了。

点评

这样做就成做数学题吧  发表于 2014-8-31 23:17
回复 使用道具 举报
LFW 中级黑马 2014-9-1 20:29:47
19#
z-翔 发表于 2014-8-31 21:38
public class Cola
{
        public static void main(String[] args)

K重置为1就好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马