面试时被这个题懵了: 猴子第一天摘下若干个桃子, 当机吃了一半, 还不过瘾又吃了一个, 以后每天早上吃前天剩下的一半零一个, 第十天早上想吃发现就剩一个, 求第一天共摘了几个.
其实很简单, 从第十天开始观察, 第十天只剩下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;
}