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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第1次上论坛,也是第一次发帖。如果发帖有什么不对、违反规则的地方,请大家尽管指正。
原题是这样:每3个瓶盖可以换一瓶可乐,要喝到28瓶可乐,需要购买多少瓶可乐?要喝50瓶呢?写出思考过程。
下面是我写的代码:
/*
需求:编写一个函数,使之计算出3个瓶盖可以换一瓶可乐的情况下,要喝m瓶可乐需要购买的可乐数。
实现:将瓶盖与可乐拆分,那么买一瓶可乐实际上是一瓶可乐加一个瓶盖,那么一个瓶盖即相当于1/2瓶可乐。使用while循环
          控制买的可乐瓶数进行遍历,使用if语句判断是否达到总共喝的瓶数;
          返回值为购买的瓶数,int型,参数类型为瓶盖数和喝的瓶数;
*/

public class Cola
{
        public static int getNum(int m)
        {
                //初始化购买数为0
                int x=0;
                while(x<m)
                {
                        //判断购买的可乐及瓶盖是否达到要喝的数量
                        if(x+x/2>=m)
                                break;
                        else
                                x++;
                }
                //返回购买的可乐瓶数
                return x;
        }
        public static void main(String[] args)
        {
                //验证代码是否正确,遍历下1-50
                for(int x=1;x<=50;x++)
                {
                        System.out.println("要喝"+x+"瓶,"+"需要买"+getNum(x)+"瓶");
                }
        }
}


上述代码可能有点问题就是假设要喝3瓶可乐的话,只需要购买2瓶就够了(就是跟老板再借一瓶可乐,凑齐三个瓶盖,换取一瓶可乐,再还给老板),想问问大家,这题允许跟老板借可乐吗?{:2_33:}

21 个回复

倒序浏览
没人回,自顶
回复 使用道具 举报
/**先思考一下
* 当购买超过3瓶以后  
* 每次总瓶数加3实际 只用购2瓶
* 所以
* 购买瓶数   ((sum-3)/3)*2+(sum%3)
  */


public class Color {

        public static void main(String[] args) {
                        buy(50);
                }
         static void buy(int sum){
                int buy;
                if(sum<=3)
                        buy=sum;
                else
                buy=((sum-3)/3)*2+(sum%3)+3;
                System.out.println(buy);
                        }
}
面试题有这么简单的??
回复 使用道具 举报
楼主,我只能说你太有想法了!
如果可以借的话。那这题就太简单了,只要除以三乘二就行了!因为每次都可以借!这样比买三得四要实惠多了!
回复 使用道具 举报
public class mianshiT {
        public static void main(String[] args) {
                int cishu=28;
                int c=kele(cishu);
                System.out.println(c);
        }
        public static int kele(int cishu) {
                int c=0;
                int huan=0;
                int counts=0;
                while(c!=cishu){
                        c++;
                        huan++;
                        counts++;
                        if(c==cishu){
                                break;
                        }
                        if(huan==3){
                                c++;
                                huan=1;
                        }
                }
                return counts;
        }
}
不知道自己写的对不对...求大神指点一二
回复 使用道具 举报
哪个的对的???
回复 使用道具 举报
路过,顶一下
回复 使用道具 举报
既然三个瓶盖可以换一瓶瓶可乐,那你怎么可以说1个瓶盖相当于1/2瓶可乐呢,应该是1/3吧,这样一来,花3瓶可乐的钱就可以得到四瓶可乐,也就是说,如果你要喝m瓶可乐,只需要花m*(3/4)的钱就行了,如果假设喝m瓶可乐需要买n瓶可乐,那么m和n的关系就是m=n*三分之四,用while循环条件语句写作while((4/3)*x)<m就可以了,
回复 使用道具 举报
残影 高级黑马 2015-9-24 22:21:38
9#
题收藏 了  我也想想。。。。
回复 使用道具 举报
肯定不可以借老板的可乐,
回复 使用道具 举报
学习了 。。。
回复 使用道具 举报
  1. /*每3个瓶盖可以换一瓶可乐,要喝到28瓶可乐,需要购买多少瓶可乐?要喝50瓶呢?写出思考过程。
  2. 思路        1        设定变量bottle初始值为1,记录瓶数
  3.                 2        建立while循环
  4.                 3        每次循环bottle+1,每当循环次数i/3=0时bottle++
  5.                 4        循环到bottle=bottle0时为止*/
  6. package exercise03;

  7. public class CokeNum {
  8.         public static int cokeNum(int bottle0) {
  9.                 int bottle = 1;
  10.                 int buyNum = 1;
  11.                 while (bottle < bottle0) {
  12.                         buyNum++;
  13.                         bottle++;
  14.                         if (bottle % 3 == 0) {
  15.                                 bottle++;
  16.                         }
  17.                 }
  18.                 return buyNum;

  19.         }
  20. }
复制代码
可乐的算法,我觉得比你的算法更准确
回复 使用道具 举报
既然是写代码,那就必然要在机器上运行,是机器的话,那你借指定是不行了。如果m比3大,除了第一次需要买3瓶得到一个瓶盖,以后只需买2瓶就可以了,(m-3)/3*2+(m-3)%3+3,还有一个事就是当你想喝3平时,你会发现你买3瓶能喝到4瓶,但你买2瓶你只能喝到2瓶,想喝三瓶只能买三瓶,多的一瓶你可以不喝。
但是我感觉我上面这位同学说的对
他是这样写的
/*每3个瓶盖可以换一瓶可乐,要喝到28瓶可乐,需要购买多少瓶可乐?要喝50瓶呢?写出思考过程。
思路        1        设定变量bottle初始值为1,记录瓶数
                2        建立while循环
                3        每次循环bottle+1,每当循环次数i/3=0时bottle++
                4        循环到bottle=bottle0时为止*/
package exercise03;

public class CokeNum {
        public static int cokeNum(int bottle0) {
                int bottle = 1;
                int buyNum = 1;
                while (bottle < bottle0) {
                        buyNum++;
                        bottle++;
                        if (bottle % 3 == 0) {
                                bottle++;
                        }
                }
                return buyNum;

        }
}


回复 使用道具 举报
任振铭 发表于 2015-9-24 22:04
既然三个瓶盖可以换一瓶瓶可乐,那你怎么可以说1个瓶盖相当于1/2瓶可乐呢,应该是1/3吧,这样一来,花3瓶可乐的 ...

三个瓶盖换的一瓶可乐里其实包含了一个瓶盖,你可以理解为两个瓶盖可以换一瓶没有盖子的可乐,所以才有一个瓶盖相当于1/2瓶可乐
回复 使用道具 举报
DD_vincent 发表于 2015-9-24 18:46
楼主,我只能说你太有想法了!
如果可以借的话。那这题就太简单了,只要除以三乘二就行了!因为每次都可以 ...

怎么不允许借了,老板又没吃亏,借你1瓶,马上又还你1瓶
回复 使用道具 举报
舒玉琛 发表于 2015-9-25 00:14
可乐的算法,我觉得比你的算法更准确

唯一的区别是当剩下两个瓶盖时,你的代码是直接忽略。我的代码是借老板1瓶可乐,喝了凑齐3个盖子换一瓶可乐还给老板
回复 使用道具 举报
罗志辉 发表于 2015-9-25 18:57
三个瓶盖换的一瓶可乐里其实包含了一个瓶盖,你可以理解为两个瓶盖可以换一瓶没有盖子的可乐,所以才有一 ...

也是啊,没想到这一点,你想的很细
回复 使用道具 举报
/*
* 28 人买可乐喝,3 个可乐瓶盖可以换一瓶可乐
* 28 人买可乐喝,3 个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够 28 人喝?假如是
* 50 人,又需要买多少瓶可乐?
*
* 分析思路:
* 要买够多少人喝,先一瓶一瓶的买,边买边换,直到可乐总数满足所有人喝为止
* 可以设可乐总数为 sum,购买的瓶数用 count 来计数
* 每购买一瓶 count 自加一,可乐总数 sum 也加一
* 可乐总数 sum 达到三的倍数时,就可以用瓶盖再换一瓶,即总数 sum 加一
* 按以上规律做一个循环,当可乐总数 sum 满足所有人需要时跳出循环,此时的
* count 值即为需要购买的瓶数
* */
/*
public class MianShi {
        public static void main(String[] args) {
                //定义人数
                int ren = 28;
                //调用方法
                System.out.println(pingShu(ren));
        }
        //定义方法
        public static int pingShu(int ren){
                //设置可乐总数
                int sum =0;
                //购买的可乐数
                int count = 0;
                //只要可乐总数小于人数
                while(sum<ren){
                        //那就购买
                        count++;
                        //总数也自增
                        sum++;
                        //如果能被3整除就赠送一瓶
                        if(sum%3==0){
                                //总数就自增
                                sum++;
                        }
                }
                //返回购买的瓶数
                return count;
        }
}


*/

点评

只要懂了思路其实很简单,没有涉及什么知识点  发表于 2015-9-25 21:24
回复 使用道具 举报
请大家关注重点:如果给你两个瓶盖,能不能换回一瓶可乐?
回复 使用道具 举报
罗志辉 发表于 2015-9-25 21:55
请大家关注重点:如果给你两个瓶盖,能不能换回一瓶可乐?

其实你这个问题挺没劲的。因为这本来就是考察你如何用代码来实现的问题。
而不论是那种情况,都可以用代码来实现。你有空考虑这些旁枝末节的东西,不如把两种思路都写出来。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马