迭代算法-计算猴子一共摘了多少个桃子
来源:互联网 发布:socket编程模型 编辑:程序博客网 时间:2024/06/11 07:35
迭代练习题:
五只猴子一起摘了一堆桃子,因为太累了,它们商量决定,先睡一觉再分.一会其中的一只猴子来了,它见别的猴子没来,便将这堆桃子平均分成5份,结果多了一个,就将多的这个吃了,并拿走其中的一份.一会儿,第2只猴子来了,他不知道已经有一个同伴来过,还以为自己是第一个到的呢,于是将地上的桃子堆起来,再一次平均分成5份,发现也多了一个,同样吃了这1个,并拿走其中一份.接着来的第3,第4,第5只猴子都是这样做的.......,根据上面的条件,问这5只猴子至少摘了多少个桃子?第5只猴子走后还剩下多少个桃子?
看到这个练习题后,如果从前面往后面推,则很难。甚至能把你的思路弄的特别混乱,如果从往前推,我们可以列出如下数学式子。假设第五只猴子走后剩下x个桃子。即s6=x;假设第五只猴子没有分桃子之前的桃子数为s5。因为第五只猴子看到这堆桃子后,分了5份,发现多了一个把多余的一个吃了,拿走了其中的一份。我们可以这样理解,猴子吃了一个桃子,然后分了五份,自己拿走了一份。剩下的桃子个数为s6;因此我们可以很快的列出下面的一个数学式子:
(s5 - 1)/5*4 = s6; A
因此是一个迭代的过程,因此。我们可以一直往上推,即可推出下面的式子。
(s4 - 1)/5*4 = s5; A
(s3 - 1)/5*4 = s4; A
(s2 - 1)/5*4 = s3; A
(s1 - 1)/5*4 = s2; A
将上面的式子进行变化,我们很快可以可以得到下面的式子。
s6=x;
s5=s6*5/4+1; B
s4=s5*5/4+1; B
s3=s4*5/4+1; B
s2=s3*5/4+1; B
s1=s2*5/4+1; B
从上面的式子,我们可以看到从s6到s1是一个迭代求解的过程。其迭代的表达式为:
s=x
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
s=s*5/4+1
另外从上面标有 A 的表达式,进行简单等式变化:
s6 = x;
(s5-1)/5 = s6/4;
(s4-1)/5 = s5/4;
(s3-1)/5 = s4/4;
(s2-1)/5 = s3/4;
(s1-1)/5 = s2/4;
从上面的式子,我们可以很快的推理出s2,s3,s4,s5,s6都是4的倍数。当然了s1不一定是4的倍数。因为我们求解桃子的总个数是个未知数,从上面的分析可知桃子的个数是4的倍数,这样很容易让我们想到进行循环,初始值为0,每次循环,如果不是需要的数,就加上4。而跳出循环的判断条件即,进行5次分桃子都能成功(进行红色B运算),即可跳出循环。
代码如下:
#include <stdio.h>
int main(int argc,int *argv[])
{
int i,j,number = 0,all;
do
{
all = number;
for (i = 1; i <= 5; i++)
{
all = all * 5 / 4 + 1;
if (all % 4 )
{
break;
}
}
if (i == 5)
{
break;
}
number += 4;
} while (1);
printf("all taozi count is : %d, the lost taozi count is :%d/n",all,number);
system("pause");
return 0;
}
程序运行结果:猴子一共摘了3121个桃子,第5只猴子走后还剩下1020个桃子。
- 迭代算法-计算猴子一共摘了多少个桃子
- 【C语言】猴子吃桃问题。猴子第一天摘下若干个桃子,每天都吃了前一天剩下的一半零一个,到第10天早上想再吃的时候,就剩下一个桃子. 求第一天共摘多少个桃子。
- ACM 324有一堆桃子不知数目猴子第一天吃掉一半又多吃了一个第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此,到第m天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个? (m<29) 输入
- 计算几何常用算法(一共23个)
- 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半...
- 猴子吃桃子问题:猴子第一天摘了若干个桃子,当时吃了若干个,还不瘾,又多吃了一个,第二天早上,又将剩下的桃子吃掉了一半,又多吃了一个。以后每一天早上都吃前一天剩下的一半零一个,直到第十天发现剩一个了,求
- 猴子吃桃问题。猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子
- 算法1 五只猴子吃桃子
- 中国字一共有多少个?
- 一共有多少个三角形
- 面试题 - 5只猴子来分桃子,问总共有多少桃子
- 海滩上最少有多少个桃子
- /*题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
- 写一个程序,统计出一个文本文件中一共出现了多少个字母‘a’?
- 这条语句一共创建了多少个对象 String s = "a"+"b"+"c"+"d";
- 一共买了多少啤酒和饮料
- 世界上一共有多少个理发师
- 全世界一共有多少个IP地址?
- js去掉String空格
- 编写JavaMai遇到的一些问题l
- ERP顾问的面试技巧
- App Store生存:iOS开发者经验分享
- (转)arm汇编语言调用C函数
- 迭代算法-计算猴子一共摘了多少个桃子
- web 压力测试工具
- 小小总结一下
- MFC中获取命令行参数的几种方法
- 大智慧证卷交易软件 ,开发者进。
- VC++6.0的使用
- 8个高质量图标的最佳搜索引擎
- 【解决方案】VC++—>add files to folder失效,open-file弹出msdev.exe应用程序错误
- 怎样学习C语言