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]