黑马程序员技术交流社区

标题: 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多... [打印本页]

作者: ypenghui    时间: 2016-5-15 10:13
标题: 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多...
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
         假如是50人,又需要买多少瓶可乐?(需写出分析思路)
  1. /**
  2.          
  3.          * 1、创建方法1,参数为整数类型 num ,返回值为整数类型
  4.          * 2、分析数据 num = n + n/3 + n/3/3 +…… ;求n
  5.          * 3、单独写个递归调用方法2等式求得右边
  6. *4、n <= num;在方法1中利用循环实现上诉等式的时候返n
  7.          */
  8.         public static void main(String[] args) {
  9.                 System.out.println(getN(28));
  10.         }
  11.        
  12.         public static int getN(int num){
  13.                 for(int i = num ; i > 0;i-- ){
  14.                         if(num == fun(i) + i){
  15.                                 return i;
  16.                         }
  17.                 }
  18.                 return -1;
  19.         }       
  20.        
  21.         public static int fun(int n){       
  22.                 if(n < 3){
  23.                         return 0;
  24.                 }else if(n >= 3 && n<6){
  25.                         return 1;
  26.                 }       
  27.                 return fun(n/3) + n/3 ;
  28.         }
  29. }
复制代码
貌似写的有些复杂化了,还有什么简单的写法吗?


作者: fengls    时间: 2016-5-16 01:02
n/3,n/3/3........,这些的余数就不考虑了吗大神
作者: ypenghui    时间: 2016-5-16 19:26
在递归函数fun(n)考虑了
作者: Sj改变    时间: 2016-5-17 18:44
代码还可以改善的
作者: ypenghui    时间: 2016-5-17 18:50
有什么好思路吗,提供点建议
作者: fengls    时间: 2016-5-18 01:02
public class Demo3 {

        public static void main(String[] args) {
                System.out.println(getN(28));
}

        public static int getN(int num){
                int i=1;
                while(num>fun(i)+i){
                        i++;
                }
                return i;
        }        
       
        public static int fun(int n){        
                if(n < 3){
                    return 0;
                }else if(n >= 3 && n<6){
                    return 1;
                }        
                return fun(n/3+n%3) + n/3 ;
        }
}

作者: ypenghui    时间: 2016-5-18 09:18
大神, while(num>fun(i)+i){
                        i++;
                }
这是神马意思
作者: 微米    时间: 2016-5-19 17:32
这个是入学的测试题吗
作者: QQ1838552465    时间: 2016-5-21 16:56
这个是上就业班的测试题吗




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