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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fightin黑马 中级黑马   /  2014-9-20 22:40  /  1794 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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


思路:
1.假设有一个房间,房间里面有两个商店,A商店只卖可乐,B商店只准用瓶盖换可乐,3个瓶盖换一瓶可乐,
*                         房间不断的有人进来,进来这个人先看一下有几个瓶盖,有3个就去B商店换,不够三个就去A商店买一瓶,
*                         设定进来多少个人,最后统计A商店卖出去的可乐就是要买的可乐.
*                         2.第1个人进入房间,没有瓶盖就去A商店买1瓶                                                                A总计卖出去1瓶
*                            第2个人进入房间,发现有1个瓶盖,不够换的就去A商店买1瓶                                        A总计卖出去2瓶
*                            第3个人进入房间,发现有2个瓶盖,不够换的就去A商店买1瓶                                        A总计卖出去3瓶
*                            第4个人进入房间,发现有3个瓶盖,就拿着三个瓶盖去B商店换一瓶                                A总计卖出去3瓶
*                            第5个人进入房间,发现有1个瓶盖,不够换的就去As商店买1瓶                                        A总计卖出去4瓶
*                                    ........
*                                 ........
*                             ........
*                         3.代码实现:
*                                         多少个人就循环多少次
*                                         进入房间就先判断瓶盖是不是三个,不是三个就去买,A商店卖出去的数量就加1
*                                         是三个就去换一瓶,喝完房间里就剩下一个瓶盖.

10 个回复

倒序浏览
学习了,,,
回复 使用道具 举报
这个题用数学好做,用C语音有点难,用java更难
回复 使用道具 举报
赞一个!
回复 使用道具 举报
wy363681759 发表于 2014-9-21 14:10
这个题用数学好做,用C语音有点难,用java更难

没有呀,我倒是觉得用程序实现更简单
回复 使用道具 举报
本帖最后由 哈达洋 于 2014-9-21 22:02 编辑

                int i;
                int j=0;
                for(i=1;(i+j+1)<=28;i++)
                {
                        j=i/2;
                }
                System.out.println(i+1);
回复 使用道具 举报
new999 中级黑马 2014-9-23 08:40:39
7#
wy363681759 发表于 2014-9-21 14:10
这个题用数学好做,用C语音有点难,用java更难

关键还是要有思路
  1. package com.itheima.test;

  2. public class EmptyBottles{
  3.         public static void main(String[] args){
  4.                 final int pNum=3;
  5.                 //3空瓶=1瓶可乐+1空瓶,也就是1空瓶=0.5瓶可乐,所以初始1瓶可乐=1.5瓶可乐
  6.                 //因此,最初只要买pNum/1.5瓶可乐,就够pNum人喝
  7.                 int num=pNum*2/3;
  8.                 System.out.println("方法1:买来"+(pNum%3==0?num:num+1)+"瓶可乐,够"+pNum+"人喝");
  9.                 System.out.println("方法2:买来"+getBottles(pNum)+"瓶可乐,够"+pNum+"人喝");
  10.         }

  11.         private static int getBottles(int pNum) {
  12.                 //empty用于记录空瓶数,sum是实际喝到的瓶数,bottles2是换来的可乐。
  13.                 int sum, empty,bottles2;
  14.                 for (int i = pNum>>>1; i < pNum; i++) {
  15.                         sum = i;//初始瓶数i,喝掉i瓶,
  16.                         empty = i;//产生i瓶空瓶
  17.                         while ((bottles2=empty/3)!=0) {//空瓶换可乐
  18.                                 sum += bottles2;//喝掉换来的可乐,
  19.                                 empty = bottles2 + empty%3;//产生的空瓶再加上上次剩下的空瓶
  20.                         }
  21.                         if(empty==2){//向老板赊来1瓶,最后用3个空瓶偿还
  22.                                 sum++;
  23.                         }
  24.                         //System.out.println("买来"+i+"瓶可乐,够"+sum+"人喝,最后剩下个"+empty+"空瓶");
  25.                         if(sum>=pNum){
  26.                                 return i;
  27.                         }
  28.                 }
  29.                 return pNum;
  30.         }
  31. }
复制代码
回复 使用道具 举报
这个貌似不太难
回复 使用道具 举报
new999 发表于 2014-9-23 08:40
关键还是要有思路

你这个做的也太复杂了。。。。。
回复 使用道具 举报
不管怎么说,还是谢谢分享
回复 使用道具 举报
路过,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马