森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。第二天再继续这个过程,直到最后剩一个核桃了,直接丢掉。
有一天,熊怪发现了1543个核桃,请问,它在吃这些核桃的过程中,一共要丢掉多少个核桃。
循环解法
public class he {
public static void main(String args[]) {
int n = 1543;//捡到的核桃数目
int a = 0;//记录丢掉的核桃
while (n >= 1) {
if ((n + 1) % 2 == 0) {//判断如果是奇数,丢一存半
n = (n - 1) / 2;
a = a + 1;
} else {
n = n / 2;//否则直接存半
}
}
System.out.print(a);
}
}
递归解法
public class di {
public static void main(String args[]){
int n=1543;
int a=0;
System.out.print(fph(n,a));
}
public static int fph(int n,int a){
if(n==1){
return (a+1);
}
if((n+1)%2==0){
n=(n-1)/2;
a=a+1;
}else{
n=n/2;
}
return fph(n,a);
}
}