注册 登录
编程论坛 C语言论坛

C++ 实例分享 《猴子吃桃》

追梦人zmrghy 发布于 2022-07-13 01:18, 932 次点击
                    猴子吃桃

一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;
第二天又吃了一半,再加上一个;后面每天都是这样吃。到第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;
}


只有本站会员才能查看附件,请 登录

1 回复
#2
rjsp2022-07-13 08:58
设第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