本文主要是介绍C语言求解猴子分桃子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
#include <stdio.h>
#include <math.h>int main()
{const int monkey_num = 5;int monkey = monkey_num;int i = 1;int peach = i;while (monkey >= 1) //从第5只猴子开始倒着推算,一直推算到第1只猴子{if (peach % 4 == 0){peach = peach / 4 * 5 + 1; //假设第n只猴子看到的桃子数是peach,那么上一只猴子看到的桃子数等于peach /4 * 5 + 1monkey--;}else //如果倒推过程失败,那么试探新的peach值,并从第5只猴子开始重新倒推{peach = ++i;monkey = monkey_num;}}printf("original peach num:%d\n", peach);return 0;
}
13只猴子,也能在几十毫秒算出结果:
如果个数再多,int要换成long long。
减少循环次数,程序速度还可以优化。
其实,仔细观察猴子和桃子的个数,可以发现两者之间有一个函数关系,可以直接根据猴子求得桃子个数~_~
这篇关于C语言求解猴子分桃子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!