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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?

在论坛上见很多人对这个题的理解是需要3个瓶盖才能换一个可乐;
其大体思路可见http://bbs.itheima.com/thread-144430-1-1.html
这样解我认为是没问题的
但是在某些人数的时候买的可乐不一定就是最优的,怎么理解呢
一般思路下认为:
人数                        1  2  3
需买可乐数        1  2  3       
但实际上第三个人的第三瓶可乐需不需要买呢?实际上是不需要的,怎么理解呢:
当第二个人买了可乐后,就有2个可乐瓶盖了,如果我再去买第三瓶可乐的话,我的手上就会出现了3个可乐瓶盖,这也就多出了一瓶可乐了,那我第三瓶可乐不是白买了么???
也就是说:当我手上有2个瓶盖的时候,我就可以去和老板商量,拿2个瓶盖做信用抵押,赊一个瓶盖换可乐,这样就将手上的可乐瓶盖全部使用了,也就是说这3个人实现了资源的最大使用,可以将这3个人分为一个组,这个组内给他们买2瓶可乐就能实现组内的每个人喝到可乐;
那么n个人也就可以分为n/3组,剩下人的就是落单的,就需要每个人买一瓶,也就是说n个人需要买n/3*2+n%3瓶可乐了
所以此题可以扩展为n个人买可乐,m个可乐瓶盖换一瓶可乐,求所需可乐数,将3换成m就好了(n/m*(m-1)+n%m)
下面附上我做这个题的代码:

  1. public class Test10 {
  2.         public static void main(String[] args) throws IOException {
  3.                 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
  4.                 while(true)
  5.                 {
  6.                         System.out.println("请输入要喝可乐的人数:");
  7.                         String string=br.readLine();
  8.                         getColaNumber(Integer.parseInt(string),3);
  9.                 }
  10.         }
  11.         //获取所需购买的可乐数;personNumber为喝可乐的人数,colaLidNumber为换一瓶可乐所需的瓶盖数
  12.         public static  void  getColaNumber(int personNumber,int colaLidNumber)
  13.         {
  14.                 int num=personNumber/colaLidNumber*(colaLidNumber-1)+personNumber%colaLidNumber;
  15.                 System.out.println(personNumber+"个人需买"+num+"瓶可乐,才够喝");
  16.         }
  17. }
复制代码



28 个回复

正序浏览
郑飞 高级黑马 2014-10-26 11:17:08
26#
N年前就有这么道脑经急转弯 脑经急转弯当然可以借瓶盖
但是编程还是依照客户需求来吧 客户说3个盖子换1瓶 咱们就得有了3个盖子才能伸手去换啊
回复 使用道具 举报
能不能借东西放在已知条件里明确一下不就好了么,非要这么惹争议干什么。
回复 使用道具 举报
笑脸迷人 发表于 2014-9-24 13:10
如果你也真的认为现实中的老板不能同意的话,那么就将这个说服工作交给专业人员去做吧~~我调用这个专业人 ...

这是运营协调的工作,调用可极大地节省时间。:lol
回复 使用道具 举报
a986875894 发表于 2014-9-24 16:43
我觉得借瓶盖这种说法逻辑有问题,假设我什么都没有,直接去老板那里借三个瓶盖换一瓶可乐,然后三个盖子还 ...

注意 你借来的3个瓶盖给了老板去换可乐了,你拿什么还当初借来的3个可乐瓶盖
回复 使用道具 举报
我觉得借瓶盖这种说法逻辑有问题,假设我什么都没有,直接去老板那里借三个瓶盖换一瓶可乐,然后三个盖子还给老板,三个瓶盖还是老板的,而我则获得一瓶可乐。。。
回复 使用道具 举报
本帖最后由 fantacyleo 于 2014-9-24 13:45 编辑
笑脸迷人 发表于 2014-9-24 13:08
现实中这些老板是很常见的:在超市中很常见的一些产品的促销买2送1之类,比如买啤酒一扎送2瓶等
如果你认 ...

前面有几位想回复我的看起来并没有搞清楚讨论状况,我就不理你们啦:P

再回楼主,你在偷换概念。我从来没说3瓶盖换1可乐和买2送1的思路不一样,思路上当然一样,问题在于思路一样不等于数量关系也一样。按你在1楼所认为的非最优“3瓶盖换1可乐”思路,老板赚了你2瓶的钱,而按买2送1,只赚了1瓶的钱,对老板来说,能一样么?

我理解你站在顾客的立场想方设法最大化自身利益。我不赞成的只是你把这种立场当作宇宙真理谁都要接受,还要用不成立的前提和“严密的数学逻辑”去论证合理性。顾客精明,老板也不傻。再退一步说,你希望买2送1,老板只赚你1瓶的钱,可老板希望赚你2瓶的钱,这是零和博弈,在老板和顾客都不傻的情况下,你的先赊后付不可能是双方都能接受的方案

至于库存成本,扯得更远了。这等于又附加了一个条件——积压。当然,你可以不断附加前提去证明任何你想要的结论,Gödel不完备定理与你同在。我只能说库存问题是“买M送N”活动的至多充分但绝非必要条件
回复 使用道具 举报
CC_gogo 发表于 2014-9-24 13:06
最大资源化,两个瓶子赊账兑换,现实中老板会同意么,但是就与这道题的角度看来,这个答案是实现的结果还是 ...

如果你也真的认为现实中的老板不能同意的话,那么就将这个说服工作交给专业人员去做吧~~我调用这个专业人员的方法就好了~~~

点评

话说到这个份上,何异于:如果你真认为永动机不存在的话,那就将这个制造工作交给民科去做吧,我负责按开关就好了  发表于 2014-9-24 13:49
回复 使用道具 举报
fantacyleo 发表于 2014-9-23 22:23
没认真看帖就回帖的是你啊,朋友。“2个瓶盖兑换一瓶无盖可乐”不就是“老板给你个瓶盖还白搭进去一瓶可乐 ...

现实中这些老板是很常见的:在超市中很常见的一些产品的促销买2送1之类,比如买啤酒一扎送2瓶等
如果你认为3瓶盖换一瓶可乐和 买2送1的思路不一样的话 我就不说了~~~

上面的回复也证明了 2个可乐瓶盖的价值是和一个无盖可乐等值的;这样的等价交换为什么就不可以呢?如果你要忽视了在现实中常存买2送1的促销的话,我无话可说

如果你还是认为不行的话,那么只有去找个   对象  来封装这个说服工作吧,~~~我调用就好了~~

还有就是如果你真当了老板,希望你能了解下库存对成本的影响。
回复 使用道具 举报
最大资源化,两个瓶子赊账兑换,现实中老板会同意么,但是就与这道题的角度看来,这个答案是实现的结果还是很可观的
回复 使用道具 举报
九零零 发表于 2014-9-23 21:38
我曾经做过这样的数量关系题,这样类型的题的解题思路和楼主说的一样,不过当时我们是这样理解的,1瓶可乐= ...

其实怎样理解都可以的,不过有个前辈一直认为这和现实不符合,说我把老板看的太笨了,毕竟角度不一样,结论就不知道会怎样了~
回复 使用道具 举报
Seven` 来自手机 中级黑马 2014-9-24 10:17:40
16#
想回复13楼,不过爪机不能盖楼回复,小时候买汽水都是直接要多少瓶,喝完一块给钱的,我想说的是,可以直接喝完换饮料,然后还给老板
回复 使用道具 举报
Seven` 来自手机 中级黑马 2014-9-24 10:14:50
15#
赞一下,这样就直接解决问题根本了
回复 使用道具 举报
楼上就说楼主结果对不对吧?我觉得楼主解法还是简单明了。
回复 使用道具 举报
笑脸迷人 发表于 2014-9-23 20:53
不要断章取义~~
我说的是: 2个可乐瓶盖的价值是可以换一瓶没有瓶盖的可乐
看明白了~~~前辈

没认真看帖就回帖的是你啊,朋友。“2个瓶盖兑换一瓶无盖可乐”不就是“老板给你个瓶盖还白搭进去一瓶可乐”么?得,绕了一圈又回到原点了。或者你想说这样一个场景:

顾客:老板你看我这严密的数学逻辑,2个瓶盖的价值就相当于一瓶无盖可乐,咱俩商量商量你先赊我一个瓶盖。。。
老板:等会,你先给我去找个老板肯让你用2个瓶盖换一瓶可乐,盖子他留下,再回来跟我说赊账的事。

╮( ̄▽ ̄)╭ 

老板说3个瓶盖换1瓶,当然是要赚你2瓶的钱。顾客从自身角度出发最大化自身利益当然没问题,但非要挖空心思不惜违背现实前提论证出个合理性来,有这个必要么?顾客可以一厢情愿,但不要低估老板的智商。还是那句话:用现实中不成立的前提去证明一个现实问题,你要觉得合适我真没话说。

回复 使用道具 举报
我曾经做过这样的数量关系题,这样类型的题的解题思路和楼主说的一样,不过当时我们是这样理解的,1瓶可乐=1个瓶盖+1瓶可乐水;由 3个可乐瓶盖=1瓶可乐 得出 3个可乐瓶盖 = 1个瓶盖+1瓶可乐水;即 2个可乐瓶盖 = 1瓶可乐水;2个可乐瓶盖 +2瓶可乐水 = 1瓶可乐水 + 2瓶可乐水;即 2瓶可乐 = 3瓶可乐水;够多少人喝就是需要多少可乐水,50人就是需要50瓶可乐水 ,50/3=16余2;16*2+2就是需要买的可乐的瓶数。关于2瓶可乐 = 3瓶可乐水理解,其实就是买2瓶可乐 然后向老板借一个可乐瓶盖 ,用3个瓶盖换一瓶可乐,然后再还老板一个可乐瓶盖。
回复 使用道具 举报
18643448863 发表于 2014-9-23 21:07
你们三个资源到是最大化了 当老板是傻子呢? 你买了三瓶 兑换后 你手里就还有一个 再买两瓶就又能换了 扔了 ...

当然一般的顾客是不会去理会的啦,既然是3瓶盖换一瓶可乐,当然要遵循规则;所以作为解题者就要充分为出题者考虑了,怎么和老板去沟通协商就是解题者要考虑的?

如果我是老板,你和我又很熟,我当然愿意了,毕竟可乐瓶盖可换就代表了价值,还加速了出货,减少库存
毕竟可乐瓶盖还是要拿去和厂家兑换的~:lol
回复 使用道具 举报
               
              
这道题也就是一个用4行代码就能解决的问题。为什么大家都搞这么复杂。
                int i; int j=0;
                for(i=1;(i+j+1)<=28;i++)
                {
                        j=i/2;
                }
                System.out.println(i+1);
回复 使用道具 举报
为什么2个可乐瓶盖就可以喝一瓶可乐呢?
3个可乐瓶盖可以换一瓶可乐=喝的可乐+可乐瓶盖
3瓶盖=一瓶完整可乐(可乐+可乐瓶盖)
2瓶盖=可乐
~~~~不用想的太复杂了
回复 使用道具 举报
你们三个资源到是最大化了 当老板是傻子呢? 你买了三瓶 兑换后 你手里就还有一个 再买两瓶就又能换了 扔了可惜,这样老板可以让你有更大的再次购买兑换的欲望。你觉得老板能答应么? 要是你是老板 你答应么
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马