黑马程序员技术交流社区
标题:
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多...
[打印本页]
作者:
ypenghui
时间:
2016-5-15 10:13
标题:
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多...
28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
假如是50人,又需要买多少瓶可乐?(需写出分析思路)
/**
* 1、创建方法1,参数为整数类型 num ,返回值为整数类型
* 2、分析数据 num = n + n/3 + n/3/3 +…… ;求n
* 3、单独写个递归调用方法2等式求得右边
*4、n <= num;在方法1中利用循环实现上诉等式的时候返n
*/
public static void main(String[] args) {
System.out.println(getN(28));
}
public static int getN(int num){
for(int i = num ; i > 0;i-- ){
if(num == fun(i) + i){
return i;
}
}
return -1;
}
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 ;
}
}
复制代码
貌似写的有些复杂化了,还有什么简单的写法吗?
作者:
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