问题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
首先对问题进行分析
每天吃的桃子是当天的一半再多一个。
即如果当天的桃子个数为n,剩下的桃子数为x,则剩下的桃子表达式为x=n/2-1;当天桃子数的表达式为n=(x+1)*2;
在最后一天剩下的桃子个数为1,但是还没有吃,所以剩下的1是前一天的,即第九天的。
根据当天桃子与剩下的桃子的关系可以得出第九天的桃子数为(1+1)*2=4个;
第八天就是(4+1)*2=10个,
依次递推可以得出第一天时一共有多少桃子。
逻辑理清楚后,就是代码的编写。
运行代码前首先进行变量声明;桃子的个数定义为1(毕竟最后只剩一个了,我们要从最后一个往回推,所以要给桃子定义1);
let peach = 1;
桃子我们有了,现在我们怎么才能推出第一天有多少桃子,那就是一天一天的进行当天的桃子计算,一层一层的加上去。土办法be like(代码从上往下运行,peach会被重复加值);
peach=(peach+1)*2//第九天
peach=(peach+1)*2//第八天
peach=(peach+1)*2//第七天
peach=(peach+1)*2//第六天
peach=(peach+1)*2//第五天
peach=(peach+1)*2//第四天
peach=(peach+1)*2//第三天
peach=(peach+1)*2//第二天
peach=(peach+1)*2//第一天
但是这样就好大一串,要挨个罗列,而且过程相同,既然这样我们就可以使用循环来进行以上步骤。
可以设定初始值为1,然后让他递加直到第九天(因为第十天没有吃,所以只吃了九天)
或者设定初始值为10,然后让他递减直到第一天(同理,只循环九天)
for (let day = 1 ; day< 10; day++) {//(let day = 10 ; day> 1; day--)
peach=(peach+1)*2
}
这样我们就完成了桃子的计算,完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
完整代码be like:结果是1534
let peach = 1;
for (let day = 1 ; day< 10; day++) {
peach=(peach+1)*2
}
document.write(peach);
看起来没用的代码
找了规律然后总结规律总数n=2**n+2!(2的n次方+2的阶乘)
let num1 = 0, num2 = 0;
for (let day = 1, dac; day < 10; day++) {
num1 = 2 ** day;
num2 = num2 + 2 ** day;
}
document.write(num1 + num2);
这回是真的结束啦*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。