暴力法——猴子分桃-源代码 c语言实现

/*海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,
拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,
拿走了一份,
第三、第四、第五只猴子都是这样做的,
问海滩上原来最少有多少个桃子?(3121)

思路
设最开始桃子个数为x
第一只猴子分到的桃子数为(x-1)/ 5,分完之后还剩x1 =(x-1)- (x-1)/ 5 = (4/5)*(x-1)
第二只猴子分到的桃子数为(x1-1)/ 5,分完之后还剩x2 =(x1-1)- (x1-1)/ 5 = (4/5)*(x1-1)
同理可得:
第五只猴子分到的桃子数为(x4-1)/ 5,分完之后还剩x5 =(x4-1)- (x4-1)/ 5 = (4/5)*(x4-1)
其中:假如设第五只猴子分到手t 个桃子,那么有x4 = t * (5/4)+1 ,
说明,每一次分完之后剩下的桃子都要能够被 4 整除
3121
            3121-1 / 5 * 4 = 2496
            2496 -1 /5 *4 = 1996
            1996 -1 / 5 *4 = 1596
            1596 -1 / 5*4 = 1276
            (1276 - 1)/ 5*4 = 1020
*/
 

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int i = 1;//第几只猴子
	int peach = 1;//桃子数量
	int count = 1; // 因为每次分桃的数量会更新,所以必须额外声明一个变量来不断递增做实验
	while (i <= 5) //当成功执行五次就说明成功了
	{
		if (peach % 5 == 1)
		{
			peach = (peach - 1) / 5 * 4;//peach在这里会变化 所以不能用peach++
			i++;
		}
		else
		{
			// 每循环一次peach的数量就加一次,然后再进行尝试判断,为了避免peach在if代码块里变化过,所以额外的一个变量来做更新
			count++;
			peach = count;
			i = 1; // 为了避免循环条件变量i也被更新过,所以只要有一次判断不成功就重新来过,重新设为初始值
		}
	}
	printf("最后的桃子数量%d\n", peach);
	for (int i = 0; i < 5; i++)
	{
		peach = peach * 5 / 4 + 1;
	}
	printf("原来最少有%d个桃子\n", peach);
	return 0;
}

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值