不冷博客

Java之猴子吃桃/苹果问题

猴子第一天摘了若干个桃子,当天吃了一半+1个;第2天吃了第1天剩下的一半+1个,第9天吃了第8天剩下的一半+1个,还剩1个,请编程解答,猴子第一天一共摘了多少个桃子?


这里提供两个方法

方法一:公式法

package com.buleng.pro_two;

public class work_4  {
    public static void main(String[] args) {
        double sum=0;
        double sh=0;
        double eat=0;
        for (int i=9;i>=1;i--){
            double val1 = Math.pow(2,i);
            double val2 = Math.pow(2,i-1);
            if (sum==0){
                sum=(1+(val1-1)/val2)*val1;
                System.out.println("总共:"+(int)sum+"个桃子");
            }
            sh=sum/val1-((val1-1)/val2);
            eat=sum/val1+(1/val2);
            System.out.println("第"+i+"天吃了"+(int)eat+"个,剩余"+(int)sh+"个");
        }
    }
}

这里可能很难看懂,说明一下,val1是2的i次方,val2是2的i-1次方,设总共的桃子数是x,然后分别写出来每天吃和剩的桃子数,你就会发现每天吃的桃子数就是上面定义的eat,剩的桃子数就是上面定义的sh,找到它们跟val1和val2之间的关系,很容易就可以算出来x以及每天吃和剩的桃子数


方法二:递归法

public class tao {
    public static void main(String[] args) {
        int x = 0;
        x=F(1);
        x=(x+1)*2;
        System.out.println("总数为:"+x);
    }
    public static int F(int n){
        if(n==9){
            return 1;
        }else{
            return F(n+1)*2+2;
        }
    }
}

递归用的是下一天剩的桃子与上一天剩的桃子数的关系,以此来类推出来总的桃子数,但是这种方式我没有想到怎么算每天吃和剩的桃子数,如果有会的网友可以在评论里面提出来,这种方法也是需要写出来公式再推出F(n+1)*2+2公式,跟斐波拉契数列的递归有类似关系,可以去百度一下看看

[scode type="yellow"]注意包名的修改以及文件名和类名,否则会运行出错 ::twemoji:star:: [/scode]

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »