猴子吃桃 的相关问题—递归解决
package arithmetic;
/**
* 1、猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
* 以后每天早上都吃了前一天剩下 的一半零一个。
* 到第10天早上想再吃时,见只剩下一个桃子了。
* 求第一天共摘了多少。
*
* 1.1猴子第一天摘下若干个桃子,当即吃了一半,剩下的比吃掉的一半多1个
* 第二天早上又将剩下的桃子吃掉一半,剩下的比吃掉的一半右多1个
* .......
* 到第10天早上想再吃时,见只剩下一个桃子了。
* 求第一天共摘了多少。
*
*
* 2、海滩上有一堆桃子,五只猴子来分。
* 第一只猴子把这堆桃子凭据分为五份,多了一个,
* 这只猴子把多的一个扔入海中,拿走了一份。
* 第二只猴子把剩下的桃子又平均分成五份,又多了一个,
* 它同样把多的一个扔入海中,拿走了一份,
* 第三、第四、第五只猴子都是这样做的,
* 问海滩上原来最少有多少个桃子?
*
*
* 3、一球从100米高度自由落下,每次落地后反跳回原高度的一半;
* 再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
*
* 4、有5个人坐在一起,
* 问第五个人多少岁?他说比第4个人大2岁。
* 问第4个人岁数,他说比第3个人大2岁。
* 问第三个人,又说比第2人大两岁。
* 问第2个人,说比第一个人大两岁。
* 最后问第一个人,他说是10岁。请问第五个人多大?
*
*
* 5、有一个长阶梯,每步上2阶,最后剩1阶;
* 若每步上3阶,最后剩2阶;
* 若每步上5阶,最后剩4阶;
* 若每步上6阶,最后剩5阶;
* 只有每步上7阶,最后一阶也不剩。
* 请问该阶梯至少有多少阶。
*
* @author sunRainAmazing
*
*/
public class MonkeyDemo {
public static void main(String[] args) {
System.out.println(testQuestion1(1));
System.out.println(testQuestion2(1));
System.out.println(testQuestion3(1));
System.out.println(raiseHeigh(100));
System.out.println(getAge(5));
getStageLeastNumber();
getStage();
}
/**
* 每天猴子吃掉一半,又多吃一个
* 到10天,最后剩一个
* @param day 天数
* @return
*/
private static int testQuestion1(int day){
if(day==10)
return 1;
else
return (testQuestion1(day+1)+1)*2;
}
/**
* 每天猴子吃掉一半,剩下的比吃掉的一半 多一个
* 到10天,最后剩一个
* @param day
* @return
*/
private static int testQuestion2(int day){
if(day==10)
return 1;
else
return testQuestion2(day+1)*2+1;
}
/**
* 在第5 只猴子分的时候 应该至少还剩下6只桃子
* @param day
* @return
*/
private static int testQuestion3(int n){
if (n==5){
return 6;
}else{
return testQuestion3(n+1) *5 + 1;
}
}
/**
* 物体下落高度,每次降落后上升一半原来的高度
* 是计算落地时的那一瞬间的路程
* @param count
* @return
*/
private static double raiseHeigh(int count){
double sum=0,distance=100;
for(int i=1;i<=count;i++){
sum+=distance;
distance/=2;
}
return sum;
}
/**
* 采用递归回推方式,求取前一个数
* @param age
* @return
*/
private static int getAge(int age){
if(age==1)
return 10;
else
return getAge(age-1)+2;
}
/**
* 采用最笨的方式进行一一测试
* 是一个奇数并且是7的倍数
*/
public static void getStageLeastNumber(){
for(int i = 1;i<99999;i+=2){
if(i%2==1 &&i%3==2 &&i%5==4 &&i%6==5 &&i%7==0){
System.out.println("最小阶梯数" + i);
break;
}
}
}
/**
* 由题意可知,---因为不知道循环的次数 采用while形式最好
* x为一个奇数,且是7的倍数,
* 故可以每步跨14,进行一个循环
*/
public static void getStage(){
int number=7;
while(number%3!=2||number%5!=4||number%6!=5){
number+=14;
}
System.out.println("最小阶梯数--->" + number);
}
}