猴子吃桃的问题

面试时被这个题懵了: 猴子第一天摘下若干个桃子, 当机吃了一半, 还不过瘾又吃了一个, 以后每天早上吃前天剩下的一半零一个, 第十天早上想吃发现就剩一个, 求第一天共摘了几个.

其实很简单, 从第十天开始观察, 第十天只剩下1个, 那么第九天没开始吃的时候有2*(1+1)个(因为每天要吃当前数量的一半+一个, 所以第十天剩下的一个就是[2*(1+1)]/2-1=1个. 

数列改一下从第10天开始反倒算第10天当作第1天算吐出来(吐是比喻)的桃子

f(n) = 2*[f(n-1)+1], f(1) = 1;

f(n)+2= 2*[f(n-1)+2] 

f(n)+2=[2^(n-1)]*[f(1)+2]

f(n) = [2^(n-1)]*[f(1)+2]-2

f(10)=(2^9)*(1+2)-2=1534(个)

用代码计算就更简单了:

#include <stdio.h>
int main(int argc, char **argv)
{
	int fn = 1, n = 2;
	for (n = 2; n <= 10; n++)
	{
		fn = 2 * (fn + 1);
	}
	printf("%d peaches were picked on the first day.\n", fn);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值