C语言:猴子分桃
#include <stdio.h> //题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个, //它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? //1.程序分析: //2.程序源代码: //设第五只猴子拿走n个 //第五只猴子分之前有:5n+1(个) //第四只猴子分之前有:(5n+1)×5/4+1 //=25/4n+9/4(个) //第三只猴子分之前有:(25/4n+9/4)×5/4+1 //=125/16n+61/16(个) //第二只猴子分之前有:(125/16n+61/16)×5/4+1 //=625/64n+369/64(个) //第一只猴子分之前有【原来】:(625/64n+369/64)×5/4+1 //=3125/256n+2101/256(个) //3125/256=12又53/256 //2101/256=8又53/256 //53n+53是256的倍数,n最小为255 //n=255时,3125/256n+2101/256=3121(个) //答:海滩上原来最少有3121个桃子 //假设第五只猴子拿到了a个桃子,那么在第五只猴子拿之前,共有5a+1个桃子。 //假设第四只猴子拿到了b个桃子,那么在第四只猴子拿到桃子后,还剩4b个桃子。 //则,4 b = 5 a + 1 , b = ( 5 a + 1 ) / 4 4b = 5a + 1, b = (5a + 1) / 44b=5a+1,b=(5a+1)/4。 //即前一天猴子拿到的桃子数可以通过后面一天猴子的桃子数推出来,由此可得解题思路: // //第五天海滩上的桃子总数m一定可以整除4(否则第四天的桃子数量不是整数),从第五天开始,前一天的桃子总数都是后一天桃子总数的5倍加1。 //海滩上有一堆桃子,5个猴子来分 int main() { int m, i, j, count; //j代表第五天的桃子数,m暂存j的值,当前j不符合条件时再从m开始遍历 for (j = 4; j < 10000; j += 4) { m = j; for (i = 0; i < 5; i++) { //循环求前四天的桃子数 count = (j / 4) * 5 + 1; if (count % 4 != 0) break; //如果中间结果不能整除4,直接跳出循环 j = count; } if (i == 4) { //此时count为第一天的桃子数 printf("total peaches = %d\n", count); } else { j = m; } } return 0; }