黑马程序员技术交流社区

标题: 分可乐问题 [打印本页]

作者: shuren2015    时间: 2015-2-28 20:49
标题: 分可乐问题
代码简单,CPU难过,有想法的请多指教
  1. package blog;
  2. //28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  3. //假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  4. //玩玩而已,思路就不写了
  5. public class CokeDemo {

  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 System.out.println(need(100));
  9.         }
  10.         //定义方法,输入可乐数,返回可以给最多多少人喝
  11.         public static int people(int sum){
  12.                 int person=sum;
  13.                 int bottle=sum;
  14.                 while(bottle>1){
  15.                         person+=bottle/3;
  16.                         bottle=bottle/3+bottle%3;
  17.                         if(bottle==2){
  18.                                 person+=1;
  19.                                 break;
  20.                         }
  21.                 }
  22.                 return person;
  23.         }
  24.         //输入人数,获得需要的可乐数量
  25.         public static int need(int person){
  26.                 int count=1;
  27.                 //从1开始遍历,直到count瓶可乐能供给的人数不小于需要喝可乐的人数
  28.                 while(people(count++)<person){
  29.                         ;
  30.                 }
  31.                 return count-1;
  32.         }

  33. }
复制代码


作者: fantacyleo    时间: 2015-2-28 21:27
我去年泡论坛时,这题可谓轰动一时,感觉不同思路的同学们就差吵起来了。贴一下我当时写的代码吧:
  1. public int getBottles(int n) {
  2.     int bottle = 0;
  3.     int cap = 0;
  4.     for (i = 1; i <= n; i++) {
  5.         if (cap < 3) {
  6.             bottle ++;
  7.             cap++;
  8.         }
  9.         else
  10.             cap = 1;
  11.     }
  12.     return bottle;
  13. }
复制代码

思路 : 一开始0瓶,0盖子。轮到每个人时,如果盖子数是3个,就拿3个盖子换一瓶,盖子数变成1(3个换一瓶,减3,但换来的一瓶又自带盖子,加1,最后是剩1个盖子),否则就买一瓶,盖子数+1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2