c语言经典算法——猴子偷桃问题
2015-04-30 18:53
1836 查看
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
算法分析://初始桃子数为sum
第一次:sum=5*x1+1
第二次:4*x1=5*x2+1
第三次:4*x2=5*x3+1
第四次:4*x3=5*x4+1
第五次:4*x4=5*x5+1
第五次分配结束:剩下4*x5个桃子,而x5>=1,故i=4*x5>=4 。每次向上推j=(i/4)*5+1;i=j;每次上推结束后判断j%4是否等于0,如果为0则继续上推,否则更新i,直到找到能够完成五次上推的整数i,最后可以得到最初的桃子数。
C语言程序:
算法分析://初始桃子数为sum
第一次:sum=5*x1+1
第二次:4*x1=5*x2+1
第三次:4*x2=5*x3+1
第四次:4*x3=5*x4+1
第五次:4*x4=5*x5+1
第五次分配结束:剩下4*x5个桃子,而x5>=1,故i=4*x5>=4 。每次向上推j=(i/4)*5+1;i=j;每次上推结束后判断j%4是否等于0,如果为0则继续上推,否则更新i,直到找到能够完成五次上推的整数i,最后可以得到最初的桃子数。
C语言程序:
#include<stdio.h> int main(int agrc, char*agrv[]) { int i, m, j, k, count; for (i = 4; i<10000; i += 4) /*i为5个猴子分配桃子后最后剩余的桃子,必须为4的倍数,然后以此为基础, 向上推5次,如果刚好能够推到第五次,则此剩余的桃子数i是满足条件的,否则换一个 剩余的桃子数,直到找到符合条件的最小剩余桃子数*/ { count = 0; m = i; for (k = 0; k<5; k++) { j = i / 4 * 5 + 1; i = j; if (j % 4 == 0) count++; else break; } i = m; if (count == 4) { printf("原来最少的桃子数为:%d\n", j); break; } } system("pause"); return 0; }
相关文章推荐
- c语言经典算法——猴子偷桃问题
- java经典算法_016猴子吃桃问题(递归)
- 数据结构与算法经典问题解析 Java语言描述pdf
- 猴子吃桃(经典算法问题)
- 经典的猴子吃桃问题,C语言算法,根据天数和当日桃子个数,求第一天猴子所摘桃的个数,
- 经典的猴子吃桃问题,C语言算法,根据天数和当日桃子个数,求第一天猴子所摘桃的个数,
- 【经典算法】:兔子繁殖问题
- 算法经典问题整理
- LeetCode | 52. N-Queens II 经典算法n后问题回溯法
- 每天一道算法--经典兔子繁殖迭代问题(斐波那契数列)
- Java经典问题算法大全
- 【经典算法】:爱因斯坦台阶问题
- 经典算法之二维数组中的查找问题
- 第 1 章 第 1 题 高级语言的排序问题 C++标准算法实现
- 一天一个算法题-简单的-递归-猴子吃桃问题
- 经典面试问题:12小球问题算法(文档)
- 经典面试问题:12小球问题算法(源码)
- C语言测试:想成为嵌入式程序员应知道的0x10个基本问题(相当经典)
- [ 算法]经典程序算法问题
- 【分享】一些经典的C/C++语言基础算法及代码(四)