【C语言】猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想……

这篇具有很好参考价值的文章主要介绍了【C语言】猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想……。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩下爱一个桃子了。求第1天共摘了多少桃子

数学思路及数学解法

本题的关键就是如何理解“到第10天早上想再吃时”,这里的第10天早上想再吃时剩下的是第9天吃剩下的,然后根据题目要求,设第 n − 1 n-1 n1天没吃之前还剩下 H ( n − 1 ) H(n-1) H(n1)个桃子,则第 n − 1 n-1 n1天猴子吃了 H ( n − 1 ) 2 + 1 \frac{H\left ( n-1 \right ) }{2} + 1 2H(n1)+1个桃子,则第 n − 1 n-1 n1天猴子吃过后剩下的桃子个数为
H ( n − 1 ) − [ H ( n − 1 ) 2 + 1 ] = H ( n − 1 ) 2 − 1 H(n-1)-\left [ \frac{H\left ( n-1 \right ) }{2} + 1 \right ]=\frac{H\left ( n-1 \right ) }{2} - 1 H(n1)[2H(n1)+1]=2H(n1)1
n − 1 n-1 n1天吃了桃子后剩下的桃子个数即为第 n n n天没吃之前还剩下桃子的个数,所以有如下递推关系 H ( n ) = H ( n − 1 ) 2 − 1 H(n)=\frac{H\left ( n-1 \right ) }{2} - 1 H(n)=2H(n1)1
(这里的 H ( n ) H(n) H(n)指的是第n天吃过后剩下的桃子个数,也就是说,若求第一天摘了多少,相当于求 H ( 0 ) H(0) H(0),第0天实际上是不存在,但是根据这个数列的定义可以发现,第1天摘了多少桃子相当于第0天吃过后还剩多少桃子)
但是这个题目没有以直接的方式给这个递推方程(差分方程)的初值条件,只给了第10天早上想吃之前还剩1个桃子(第9天吃过后剩下了1个桃子)这个条件,我们只能从第10天反向遍历到第1天,将递推方程恒等变形得:
H ( n − 1 ) = 2 [ H ( n ) + 1 ] H(n-1)=2\left [ H(n)+1 \right ] H(n1)=2[H(n)+1]
由于第10天早上想吃之前还剩1个桃子(第9天吃过后剩下了1个桃子)
所以 H ( 9 ) = 1 H(9)=1 H(9)=1,则 H ( 8 ) = 2 [ H ( 9 ) + 1 ] = 2 ( 1 + 1 ) = 4 H(8)=2\left [ H(9)+1 \right ] =2(1+1)=4 H(8)=2[H(9)+1]=2(1+1)=4
这样我们就拿到了初值条件和差分方程
由于 H ( n ) = H ( n − 1 ) 2 − 1 H(n)=\frac{H\left ( n-1 \right ) }{2} - 1 H(n)=2H(n1)1
H ( n ) − H ( n − 1 ) 2 = − 1 H(n)-\frac{H\left ( n-1 \right ) }{2} =- 1 H(n)2H(n1)=1,这是一个一阶线性非齐次差分方程,它的特征方程为 λ − 1 2 = 0 \lambda -\frac{1}{2} =0 λ21=0 λ = 1 2 \lambda =\frac{1}{2} λ=21
则设改方程对应的齐次方程的通解为 H C ( n ) = C ⋅ ( 1 2 ) n H_{C} (n)=C\cdot \left ( \frac{1}{2} \right ) ^{n} HC(n)=C(21)n
则非齐次方程的特解为 H ∗ ( n ) = A H_{*}(n)=A H(n)=A
H ( n ) = C ⋅ ( 1 2 ) n + A H(n)=C\cdot \left ( \frac{1}{2} \right ) ^{n}+A H(n)=C(21)n+A
由于 H ( 9 ) = 1 H(9)=1 H(9)=1 H ( 8 ) = 4 H(8)=4 H(8)=4则有
H ( 8 ) = C ⋅ ( 1 2 ) 8 + A = 4 H(8)=C\cdot \left ( \frac{1}{2} \right )^{8}+A=4 H(8)=C(21)8+A=4
H ( 9 ) = C ⋅ ( 1 2 ) 9 + A = 1 H(9)=C\cdot \left ( \frac{1}{2} \right )^{9}+A=1 H(9)=C(21)9+A=1
联立上述两个方程解得 C = 3 ⋅ 2 9 C=3\cdot 2^{9} C=329, A = − 2 A=-2 A=2
故差分方程的通解为 H ( n ) = 3 ⋅ 2 9 ⋅ ( 1 2 ) n − 2 H(n)=3\cdot 2^{9}\cdot \left ( \frac{1}{2} \right ) ^{n}-2 H(n)=329(21)n2
故第一天摘了 H ( 0 ) = 1534 H(0)=1534 H(0)=1534个桃子
这是利用差分方程理论的数学解法,计算机可以利用递推关系进行循环得到结果,循环结束的条件是天数小于0,(也就是说我们要求到第0天即 H ( 0 ) H(0) H(0)),P.S循环的时间复杂度不如直接将数列通项公式直接带入好,但是在这里为了体现编程的思想我还是给出循环的C语言代码实现,但是通项公式法需要编程人员掌握大学微积分(高等数学)。

代码(循环法)

#include <stdio.h>
//到第m天吃过后还剩下n个桃子
void func(int m,int n)
{
    int temp = m;//用于记录天数m的变量,在下文中会将其作为循环的迭代器
    int x1 = 0;//记录H(n-1)
    int x2 = n;//记录H(n)
    if (m == 0 || n == 0)
    {
        printf("天数和桃子数不符合规定!\n");
    }
    //循环,一直到天数小于等于0时退出
    while (temp > 0)
    {
        //求出当前天的前一天还剩多少桃子即H(n-1)
        x1 = 2 * (x2 + 1);
        //让x2变成x1,即天数向前串一位;
        x2 = x1;
        //循环一次,相当于从后往前循环一天,所以要减少一天
        temp--;
    }
    printf("第1天一共吃了%d个桃子\n", x2);
}
int main()
{
    //题干要求是第10天早上想吃的时候只剩1个,说明第10天还没吃,剩下的一个是第9天吃剩下的,所以m=9
    func(9, 1);
}

循环法的时间复杂度为 O ( n ) O(n) O(n)

代码(通项公式法)

#include <stdio.h>
#include<math.h>
//通项公式法
long double H(int n)
{
    return 3.0 * pow(2, 9) * pow(0.5, (long double)n) - 2.0;
}
int main()
{
    printf("第1天一共吃了%1.0f个桃子\n", H(0));
}

通项公式法的时间复杂度为 O ( 1 ) O(1) O(1),而循环法的时间复杂度为 O ( n ) O(n) O(n),高下立判了家人们,论学好数学的重要性,学好数学能减少多少算法运行的时间啊!文章来源地址https://www.toymoban.com/news/detail-450128.html

到了这里,关于【C语言】猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想……的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【华为OD机考 统一考试机试C卷】 爱吃蟠桃的孙悟空 / 猴子吃桃(C++ Java JavaScript Python)

    目前在考C卷,经过两个月的收集整理, C卷真题已基本整理完毕 抽到原题的概率为2/3到3/3, 也就是最少抽到两道原题。 请注意:大家刷完C卷真题,最好要把B卷的真题刷一下,因为C卷的部分真题来自B卷。 另外订阅专栏还可以联系笔者开通在线OJ进行刷题,提高刷题效率。

    2024年02月04日
    浏览(41)
  • 猴子摘香蕉问题

    一个房间里,天花板上挂有一串香蕉,有一只猴子可在房间里任意活动(到处走动,推移箱子,攀登箱子等)。设房间里还有一只可被猴子移动的箱子,且猴子登上箱子时才能摘到香蕉,问猴子在某一状态下(设 猴子 位置为 A , 香蕉 位置在 B , 箱子 位置为 C ),如何行动

    2024年02月06日
    浏览(31)
  • 若干优化问题的测试集

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号: 启发式算法讨论 。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。 原文在

    2024年02月01日
    浏览(32)
  • 人机协同若干问题的分析

    一、人机协同的发展态势 人机协同的发展态势是指人类和机器之间合作和协同工作的趋势和动态。 1、增强人类能力 机器可以通过智能算法、大数据分析和机器学习等技术来增强人类的能力。例如,人工智能可以帮助医生更准确地诊断疾病,或者帮助律师更高效地处理法律案

    2024年02月01日
    浏览(26)
  • 【AIGC】猴子拍照版权是谁的:一文读懂AIGC和版权问题

    目录 一、没有明确的定义 1.AI画作算作品吗? 2.AI 绘画的版权归谁? 二、关注平台的版权声明 三、猴子拍照 1、是否应当给予AI作品版权? 2、AI创作的版权赋予谁? 写文章,做图片,AI无所不能,虽然有时也冒点傻气,但是确实越来越像人类了。 而且画的图,除了有几分无

    2024年02月05日
    浏览(32)
  • C语言7:输入若干个学生的成绩,统计出平均成绩

    在程序编辑区编写程序,给定程序功能是: 从键盘上输入若干个学生的成绩,统计出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。 例如输入: 70  80  90  -1 输出: ave =80.00 --------OUTPUT----------- 70.0 程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果

    2024年02月06日
    浏览(32)
  • git出现的若干问题以及解决方案

    目录 git clone: 1.Failed to connect to github.com port 443 after 21071 ms: Timed out 2.fatal:OpenSSL SSL_read: Connection was reset, erron 10054 3.想git clone特定分支怎么办? git push: 1.fatal, ref 2.GnuTLS recv error (-110): The TLS connection was non-properly terminated .git文件瘦身 如何查看git暂存区的文件 能ping通github.com,但

    2024年02月08日
    浏览(27)
  • 【华为OD机试真题 Python语言】443、贪吃的猴子 | 机试真题+思路参考+代码解析(C卷)

    🍂个人博客首页: KJ.JK   🍂专栏介绍: 华为OD机试真题汇总,定期更新华为OD各个时间阶段的机试真题,每日定时更新,本专栏将使用Python语言进行更新解答,包含真题,思路分析,代码参考,欢迎大家订阅学习

    2024年02月03日
    浏览(51)
  • 关于Tomcat控制台输出乱码的若干问题

    ​ 在学习Maven、Tomcat的过程中,发现会在不同的地方出现中文乱码,原本以为是某个设置没有正确,所以,出现乱码。后来发现,需要在不同的地方来进行调整,才能保证Tomcat在控制台的输出,以及Maven过程在参数传递过程中都不会出现乱码。第一次写文章,不怎么会写,大

    2024年02月09日
    浏览(33)
  • 请教ChatGPT若干个关于测试开发职业发展的问题

    最近比较热门的ChatGDT,正好有空,问它几个比较热门的问题,看看如何答复? 未来的测试和开发将更加自动化, 自动化测试和开发的工具和技术将更加完善, 对于提升软件开发效率和质量起到了巨大的作用。 AI和机器学习也将大大提升编程效率,可以自动完成大量的繁琐的

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包