猴子分桃问题的几种解法

五只猴子采得一堆桃子,半夜里第一只猴子偷偷起来把桃平均分成五分,发现还多一个,它吃了哪个桃子,还拿走其中的一份,第二只猴子起来又把桃子分成五分,还多一个,它吃了那个桃子,有拿走其中的一份,第三第四第五只猴子都如此做了,请问这堆桃子有多少个。

(新人)

在参考了一些经典解法、研究了该问题的过程后,以下为一些自认为较为简洁明白的解法程序

1.利用总式子为整数,进行枚举循环。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	double a=2;
	int i,j,k;
	for (i = 0; i < 3200; i++)         //这里估计了一下大致范围
	{
		for (j = 0; j < 5; j++)               //含义是对a进行题述处理,中间过程及结果必须是整数,以此为标准来判断
		{
			k = 0;
			a = 0.8*(a - 1);
			if ((a -(int)a)!=0 )     //判断整数
				break;
			k = 1;
		}
		if (k==1)
			break;
		a=3+i;
	}
	a = 2 + i;                        //注意,如果直接输出,结果是第五只猴子分后剩余的数量,同时,i已经多了1
	printf("桃子数量为%.01lf", a);   //double 一般对应lf
	return 0;
}

当然,虽然个人认为这种较好理解,但总感觉结构比较拖沓。只是一种方向初步的想法,仅仅参考,并不是较为泛用的方法

2. 4 的倍数

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int  i=0,x, t;
	for(x=4; i < 5;x=x+4)
	{		
		t=x;       //要注意此处容易漏掉,必须有交换,否则x=x+4中的x是进行迭代过后的x!!
		for (i = 0; i < 5; i++)
		{
			if (t % 4 != 0)
				break;
			t = (t / 4) * 5 + 1; 
		}
	}
	printf("%d", t);
	return 0;
}

最根本的依据确实很像:都是依据每次分桃后必为4的倍数,但处理过程有所不同。

想借此拓展一些附加功能,比如输出每次的执行结果,整理成表,探究不同形式的循环设置,再看看书中对于循环的讲解,拓宽应用的思路

3.看知乎还有人直接给了通项公式

还不会latex,直接打出来是y=n^n-n+1,n是猴子个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值