猴子吃桃的相关问题

猴子吃桃 的相关问题—递归解决

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;//这是第十次上升的高度
            //sum+=distance;仅仅是计算落地的那一刻所产生的距离,
        }   
        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);
    }


}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值