题目

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

数学思路及数学解法

本题的关键就是如何理解“到第10天早上想再吃时”,这里的第10天早上想再吃时剩下的是第9天吃剩下的,然后根据题目要求,设第n−1n-1n−1天没吃之前还剩下H(n−1)H(n-1)H(n−1)个桃子,则第n−1n-1n−1天猴子吃了H(n−1)2+1\frac{H\left ( n-1 \right ) }{2} + 12H(n−1)​+1个桃子,则第n−1n-1n−1天猴子吃过后剩下的桃子个数为
H(n−1)−[H(n−1)2+1]=H(n−1)2−1H(n-1)-\left [ \frac{H\left ( n-1 \right ) }{2} + 1 \right ]=\frac{H\left ( n-1 \right ) }{2} - 1H(n−1)−[2H(n−1)​+1]=2H(n−1)​−1
第n−1n-1n−1天吃了桃子后剩下的桃子个数即为第nnn天没吃之前还剩下桃子的个数,所以有如下递推关系H(n)=H(n−1)2−1H(n)=\frac{H\left ( n-1 \right ) }{2} - 1H(n)=2H(n−1)​−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(n−1)=2[H(n)+1]
由于第10天早上想吃之前还剩1个桃子(第9天吃过后剩下了1个桃子)
所以H(9)=1H(9)=1H(9)=1,则H(8)=2[H(9)+1]=2(1+1)=4H(8)=2\left [ H(9)+1 \right ] =2(1+1)=4H(8)=2[H(9)+1]=2(1+1)=4
这样我们就拿到了初值条件和差分方程
由于H(n)=H(n−1)2−1H(n)=\frac{H\left ( n-1 \right ) }{2} - 1H(n)=2H(n−1)​−1
则H(n)−H(n−1)2=−1H(n)-\frac{H\left ( n-1 \right ) }{2} =- 1H(n)−2H(n−1)​=−1,这是一个一阶线性非齐次差分方程,它的特征方程为λ−12=0\lambda -\frac{1}{2} =0λ−21​=0即λ=12\lambda =\frac{1}{2}λ=21​
则设改方程对应的齐次方程的通解为HC(n)=C⋅(12)nH_{C} (n)=C\cdot \left ( \frac{1}{2} \right ) ^{n}HC​(n)=C⋅(21​)n
则非齐次方程的特解为H∗(n)=AH_{*}(n)=AH∗​(n)=A
则H(n)=C⋅(12)n+AH(n)=C\cdot \left ( \frac{1}{2} \right ) ^{n}+AH(n)=C⋅(21​)n+A
由于H(9)=1H(9)=1H(9)=1,H(8)=4H(8)=4H(8)=4则有
H(8)=C⋅(12)8+A=4H(8)=C\cdot \left ( \frac{1}{2} \right )^{8}+A=4H(8)=C⋅(21​)8+A=4
H(9)=C⋅(12)9+A=1H(9)=C\cdot \left ( \frac{1}{2} \right )^{9}+A=1H(9)=C⋅(21​)9+A=1
联立上述两个方程解得C=3⋅29C=3\cdot 2^{9}C=3⋅29,A=−2A=-2A=−2
故差分方程的通解为H(n)=3⋅29⋅(12)n−2H(n)=3\cdot 2^{9}\cdot \left ( \frac{1}{2} \right ) ^{n}-2H(n)=3⋅29⋅(21​)n−2
故第一天摘了H(0)=1534H(0)=1534H(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=9func(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),高下立判了家人们,论学好数学的重要性,学好数学能减少多少算法运行的时间啊!

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

  1. 猴子吃桃问题:一只小猴子摘了若干桃子,每天吃现有桃的一半多一个,到第10天时就只有一个桃子了,求原有多少个桃?请编程实现。(C++)(迭代法)

    算法经典题型14 猴子吃桃问题:一只小猴子摘了若干桃子,每天吃现有桃的一半多一个,到第10天时就只有一个桃子了,求原有多少个桃?请编程实现. 用到的思想-迭代法 博主用到的环境:Win7, CodeB ...

  2. C语言 猴子吃桃的问题 猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个。 第二天早上将剩下的桃子吃一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时只剩下一个桃子

    C语言 猴子吃桃的问题 题目: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个. 第二天早上又将剩下的桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下的一半零一个. 到第N天早上 ...

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

    C语言猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,就 ...

  4. 猴子第一天摘下若干个桃子,当时吃了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个谭浩强c语言第五章第十二题

    题目 本题是谭浩强<c语言程序设计>第五章第十二题 题目:猴子第一天摘下若干个桃子,当时吃了一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上再想吃时,就只剩一个 ...

  5. C语言编程>第二周 ⑦ 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。

    例题:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩 ...

  6. C语言学习之猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。

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

  7. C语言:猴子吃桃问题:猴子第一天摘下若干桃子,当即吃了一半多一个,第二天将剩下的桃子吃掉一半多一个,以后每天都吃掉前一天剩下桃子的一半多一个。到第10天想再吃时,只剩下一个桃子。

    题目: 猴子吃桃问题:猴子第一天摘下若干桃子,当即吃了一半多一个,第二天将剩下的桃子吃掉一半多一个,以后每天都吃掉前一天剩下桃子的一半多一个.到第10天想再吃时,只剩下一个桃子.求第一天猴子共摘了多少 ...

  8. ACNO.15猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再

    题目描述 猴子吃桃问题.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将剩下的桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下的一半零一个.到第N天早上想再吃时,见 ...

  9. 编程笔试(解析及代码实现):猴子吃桃。猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个…的C++、Java、Python、C#等语言代码实现

    编程笔试(解析及代码实现):猴子吃桃.猴子第一天吃了若干个桃子,当即吃了一半,还不解馋,又多吃了一个. 第二天早上又将剩下的桃子吃了一半,还是不过瘾,又多吃了一个.以后每天都吃前一天剩下的一半再加一个 ...

最新文章

  1. 如何建立图像数据矩阵和图像显示灰度之间的关系!_放射技术考试第四章第一节 数字图像的特征...
  2. DFS template and summary
  3. K项目的一些心得之全球模板里的几个骚操作
  4. 提升tomcat 性能的经验
  5. jenkins 增量发布插件_CI/CD工具:Jenkins还是GitLab CI/CD?
  6. 教资计算机科学与技术教资,教资笔试查成绩啦!广师大未来教师们又前进一步...
  7. 从程序员角度分析,到底“12306”的架构到底有多牛逼?
  8. 【OpenCV学习】基本矩阵
  9. bootstrap 按钮样式单选效果_【20201117】Bootstrap前端框架学习笔记
  10. 新浪微博:已经吃下去的,又全都吐出来了!
  11. C/C++面试题总结
  12. opencv图像分析与处理(12)-逆滤波、维纳滤波、约束最小二乘方滤波和几何均值滤波
  13. win10如何强制性关闭驱动数字签名
  14. shopex4.8.5 php5.6,ShopEx(网上商店系统)
  15. true launch bar 和 editplus
  16. 进阶篇:3.5)粉末冶金件设计
  17. DML和DDL的区别
  18. Acwing 360. Freda的传呼机(仙人掌图重构,lca)
  19. 基于微信小程序的同城家政服务小程序
  20. 微信小程序实现添加银行卡,银行卡号每隔四位插入空格并展示时仅显示前后四位,或者仅显示后四位(超详细)

热门文章

  1. Mysql sql 对行数据求和
  2. 看最强大脑的数字华容道,尝试理解与总结
  3. python 推导式练习题
  4. 2022 AI 岗位风向标
  5. 深圳-数据岗位面试不完全记录(回忆版)
  6. 一入编码深似海,在达观数据做程序员是怎样一种体验?
  7. SpringSecurity-12-PasswordEncoder密码加密简介
  8. 新手也能看懂,Kubernetes其实很简单
  9. AVFoundation–简介
  10. Cocos2dx之精灵坐标系