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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
* 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;
        }
}
这样做测试会给通吗!?求大神解

3 个回复

倒序浏览
我想问,这样算不算有思路,就是我先分析出人数和可乐数的关系,然后直接递归算法,有点像兔子问题(斐波那契数列)
回复 使用道具 举报
我把它封装成对象了
  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. }
复制代码
回复 使用道具 举报
萧未然 发表于 2015-11-29 11:22
我把它封装成对象了

不错,这种思路很值得借鉴
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马