程序设计训练63猴子摘桃

问题描述:

五只猴子一起摘了一堆桃子,因为太累,五只猴子决定先睡一觉再分。不久,
其中一只猴子醒来了,它见别的猴子没有醒来,便将一堆桃子平均分成 5 份,
结果多了一个,就将多的这个吃了,拿走其中的一份并离开。又不久,第二只猴
子醒来了,它不知道有一个同伴已经拿走过桃子,便又将剩下的桃子平均分成 5
份,发现也多了一个,同样吃了这一个,拿走其中的一份。如此类推第 3 只,第
4 只,第 5 只猴子都是这样分、吃、拿走。问这 5 只猴子至少摘了多少个桃子?

解题思路:

依题意得知,第五只候拿后剩余的肯定为 4的倍数
不妨从 4 开始 后若不满足条件 则逐次加4
规律:每次剩余的数量,减一都是5的倍数。除没拿之前的总数外,其余剩余的都是4的倍数
设最后五只候完成自己操作后,剩余的为x, 则有 上一次剩余的为 x 5/4 +1 递归5次 同时满足所有数据为整数即可
*

具体代码实现(未优化):

#include "stdafx.h"
#include<iostream>

using namespace std;
int peach(int x)
{

return x*5/4 + 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int p=4,T;
while (1)
{
T = p;
for (int i = 1; i <= 5; i++)
{
if (T % 4 != 0) //如果对4求余不等于0 则 p+= 4 ; 即为了满足 对 *5/4 为整数;
goto loop;
T = peach(T);
}
break; // 如果满足五次的需求则跳出 完成操作!
loop:
p +=4;

}
cout << T;
return 0;
}

运行截图:

63猴子摘桃_李阡殇

总数 = 3121
第一只候吃了一个桃,并且拿了 1/5 后 剩 2496
第二只候吃了一个桃,并且拿了 1/5 后 剩 1996
第三只候吃了一个桃,并且拿了 1/5 后 剩 1596
第四只候吃了一个桃,并且拿了 1/5 后 剩 1276
第五只候吃了一个桃,并且拿了 1/5 后 剩 1020 1020 / 4 = 255 满足需求