黑马程序员技术交流社区

标题: 可乐问题,不知道这样写可不可以,大神给断断 [打印本页]

作者: 米阳SOHO    时间: 2015-11-29 09:21
标题: 可乐问题,不知道这样写可不可以,大神给断断
/*
* 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,
* 那么要买多少瓶可乐,够28人喝?
* 假如是50人,又需要买多少瓶可乐?(需写出分析思路)
* 人数        1 2 3 4 5 6 7 8 9 10 ……
* 可乐        1 2 3 3 4 5 5 6 7 7……
*
*/
public class Test1 {
        public static void main(String[] args) {
                int num = bottol(28);
                System.out.println("28人需要:" + num);
                num = bottol(50);
                System.out.println("50人需要:" + num);
        }

        public static int bottol(int renshu) {
                if (renshu == 1) {
                        return 1;
                } else if (renshu == 2) {
                        return 2;
                } else if (renshu == 3) {
                        return 3;
                }
                return (renshu % 3 == 1) ? bottol(renshu - 1) : bottol(renshu - 3) + 2;
        }
}
这样做测试会给通吗!?求大神解
作者: 米阳SOHO    时间: 2015-11-29 09:24
我想问,这样算不算有思路,就是我先分析出人数和可乐数的关系,然后直接递归算法,有点像兔子问题(斐波那契数列)
作者: 萧未然    时间: 2015-11-29 11:22
我把它封装成对象了
  1. class PeopleDrink{
  2.         public static void main(String[] args) {
  3.                 PeopleDrink p=new PeopleDrink(28);
  4.                 System.out.println(p.getC());
  5.         }
  6.         PeopleDrink(int people){
  7.                 this.people=people;
  8.                 setC();//初始化可乐
  9.         }
  10.         private int people;//人数
  11.         private int c;//可乐
  12.         private int count;//计数器
  13.         private void setC(){
  14.                 c++;
  15.                 if(c%3==0)count+=2;
  16.                 else count++;
  17.                 if(count==people)return;
  18.                 setC();
  19.         }
  20.         public int getC(){
  21.                 return c;
  22.         }
  23.        
  24. }
复制代码

作者: 米阳SOHO    时间: 2015-12-2 20:44
萧未然 发表于 2015-11-29 11:22
我把它封装成对象了

不错,这种思路很值得借鉴




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