优化的递归,很容易得出,事实上这种优化并不能达到所有数据都在规定时间内
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了
前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子,
要求编写函数GetNumber(int n)求出猴子共摘了几个桃子。
输入格式
输入整数n。
输出格式
输出整数m。
样例输入
一个满足题目要求的输入范例。
例:
3
样例输出
与上面的样例输入对应的输出。
例:
10
数据规模和约定
输入的整数2<=n<=30.
class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();//第n天发现剩下1个桃子
int m=1;
if(n!=1){
for (double j=(n*n)%2==0?n*n:n*n+1;;j=j+2){//桃子数量肯定比n*n要多,注意j必须是double类型,不然会有多种答案
if (helper(j,n,1)){
m=(int)j;
break;
}
}
}
System.out.println(m);
}
public static boolean helper(double m,int n,int curr){
if (curr==n){
return m==1;
}else{
return helper(m-(m/2+1),n,curr+1);
}
}
}