页次: 1
猴子吃桃
一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;
第二天又吃了一半,再加上一个;后面每天都是这样吃。到第10天的时候,
小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子。
#include <iostream>
using namespace std;
int main()
{
int day_peac[11]={0};
for(int day=10; day>=1; day--)
day_peac[day] = day>9 ? 1 : (day_peac[day+1] + 1) * 2;
cout << endl<< " 第一天共摘的桃子数量为 "<<day_peac[1] <<"个." << endl;
cout << endl<< " 这是什么猴子呀??? 猪一天也吃不了 "<<day_peac[2]+2 <<"个桃子呀!!!"<< endl;
return 0;
}
设第i天剩余 x 颗,则第i天的前一天剩余 2*x+2 颗。
即 f(1)=x; f(i+1)=2*f(i)+2
故有 f(i) = x*2^(i-1) + 2^i-2
#include <stdio.h>
int main( void )
{
// 已知:第i天剩余x颗
const unsigned i = 10;
const unsigned x = 1;
// 则第一天采摘量: x*2^(i-1) + 2^i-2
printf( "%u\n", x*(1u<<(i-1))+(1u<<i)-2 );
}
离线
页次: 1