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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kangzhuang112 中级黑马   /  2014-6-21 08:30  /  2672 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

题目是这样的:
10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
顺便奉上我的源代码:

package com.itheima;
import org.junit.Test;
/**
* date :  Jun 14, 2013
*
* time :  8:32:51 PM
*
* author : Spole
*
*/
/**
* 题目: 28人买可乐喝,
*
* 3个可乐瓶盖可以换一瓶可乐,
*
* 那么要买多少瓶可乐,够28人喝?
*
* 假如是50人,又需要买多少瓶可乐?
*
* (需写出分析思路)
*/
public class Test10 {
@Test
public void test10() {
  /* 28个人时需要的的可乐瓶数:*/
  int sum = keLe(28);
  System.out.println("28人至少需要"+sum+"瓶可乐");
}
@Test
public void test50() {
  /* 50个人时需要的的可乐瓶数:*/
  int sum = keLe(50);
  System.out.println("50人至少需要"+sum+"瓶可乐");
}
public int keLe(int people) {
  // 空瓶数
  int empty = 0;
  // 总瓶数(需要买的)
  int sum = 0;
  for (int i = 0; i < people; i++) {
   if (empty != 3) {
    empty = empty + 1;
    sum = sum + 1;
   } else if (empty == 3) {
    empty = 1;
   }
  }
  return sum;
}
/**
  我是从空瓶子来考虑问题的,
  每当有三个空瓶子就换一瓶可乐,
  同时又有一个空瓶子。
  当空瓶子数量小于3时,不断累加。。。
  */
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

13 个回复

正序浏览
有意思,学习了。
回复 使用道具 举报
uu993 中级黑马 2014-6-22 09:11:19
13#
123_yaya 发表于 2014-6-21 22:15
我能说我的思路是直接用方程解吗?设至少要买x瓶可乐,那么得出公式 x/3+x>=28 / 50(反正就是人数),然后 ...

这样貌似不行啊,这样子剩下的空瓶子没处理,楼上的都是正解~
回复 使用道具 举报
郑飞 发表于 2014-6-22 01:20
其实直接猜 或者用几个数试试就能出来了 做题就是为了提高业务能力的
再说你的方程也有问题的 你用盖子 ...

对哦,谢谢指点。
回复 使用道具 举报
当人数比较多的时候,就是2/3的人数,向上取整
public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
       
        int pe=28;  //人数
        System.out.print("请输入人数:");
        while((pe=cin.nextInt())>0){
        int x=0;  //买可乐瓶数
        int y=0;  //最终剩余瓶子数
        for(int i=0;i<pe;i++){
            if(y<3){
                x++;
                y++;
            }else{
                y-=2;
            }
        }
        System.out.println("买可乐瓶数:"+x);
        System.out.println("最终剩余瓶子数:"+y);
        System.out.println("------------------------------------");
        System.out.print("请输入人数:");
    }
    }
回复 使用道具 举报
我表示我完全看不懂
回复 使用道具 举报
郑飞 高级黑马 2014-6-22 01:20:37
9#
123_yaya 发表于 2014-6-21 22:15
我能说我的思路是直接用方程解吗?设至少要买x瓶可乐,那么得出公式 x/3+x>=28 / 50(反正就是人数),然后 ...

其实直接猜 或者用几个数试试就能出来了 做题就是为了提高业务能力的
再说你的方程也有问题的 你用盖子换完一次可乐 那这些可乐还有盖子啊 你方程里漏掉了后面的盖子
回复 使用道具 举报
锦宁 中级黑马 2014-6-22 00:05:00
8#
了解了!!!!
回复 使用道具 举报
我能说我的思路是直接用方程解吗?设至少要买x瓶可乐,那么得出公式 x/3+x>=28 / 50(反正就是人数),然后解方程x是多少。。。
回复 使用道具 举报
    学习了
回复 使用道具 举报
本帖最后由 黎志勇 于 2014-6-21 13:22 编辑

所有人排队去买可乐,凑够三个瓶盖就换可乐给下面那个人喝,剩下的继续排队买,直到每个人都喝到可乐。
  1. public class Demo2 {

  2.     public static void main(String[] args) {
  3.         // TODO Auto-generated method stub
  4.         for(int i=0;i<100;i++){
  5.             buy(i);//验证
  6.         }
  7.     }
  8.    
  9.     public static void buy(int man){
  10.         int buyCount = 0,drinked=0,gaizi=0;//买的瓶数,喝到可乐的人数,剩下的瓶盖数
  11.         while(drinked<man){
  12.             buyCount++;//不是所有人都喝了,就买一瓶新的可乐
  13.             drinked++;//多了一个人喝到可乐
  14.             gaizi++;//喝完多了一个盖子
  15.             if(drinked<man&&gaizi==3){//再判断是否 所有人都喝了,不是就看盖子凑没凑够3个
  16.                 gaizi/=3;//凑够就换一瓶,喝完得到一个盖子
  17.                 drinked++;//多了一个人喝完
  18.             }
  19.         }
  20.         System.out.println("人数:"+man+",买的瓶数目:"+buyCount);
  21.     }

  22. }

复制代码


回复 使用道具 举报
这个题略微头疼啊
回复 使用道具 举报
面试题?意思是 挡着老师的面写这个的代码吗?
回复 使用道具 举报
/*
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)

*/

/*
思路:
1:正向思维,从0开始买可乐,28和50作为控制条件;
2:每买一瓶进入一次for循环,记得每次盖子数和可乐数都增加1;
3:进入for循环后,换可乐是个问题,所以我用了while循环把盖子全部换成可乐;
        每次换到的可乐数=盖子/3 +盖子%3(这个理解了其他就好办了);               
*/
class HeiMa{
       
        public static void main(String[] args){
        hekele(28);
        hekele(50);
        }
                public static void hekele(int man){

                        int kele;//买的可乐数
                        int gaizi ;//盖子数
                        int people = 0;//喝到可乐的人数
                        int change = 0;//换到的可乐数//

                        for(kele=0,gaizi=0;people<man;kele++,gaizi++){
                                while(gaizi>2){
                                change = change + gaizi/3; //更新换到的可乐数
                                gaizi =gaizi/3+ gaizi%3;  // 更新剩余盖子数
                                }
                                people = kele + change ;
                                if(people==man){
                                System.out.println("kele="+kele);
                                }
                        }
                }
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马