枚举算法3——五猴分桃

五猴分桃:五只猴子一起摘了一堆桃子,因为太累了决定先睡一觉再分。一会其中一个猴子先过来将桃子分成五分,剩了一个桃子就给吃了,并拿走其中一份。
一会第2只猴子过来。又将剩下的桃子分成5份,发现多了一个桃子给吃了,并拿走其中一份,接着来的第3只、4只、5只猴子都是这样做的,它们一共摘了多少桃子,第5只猴子走后剩多少。

【分析】
桃子总数S0,五个猴子分别拿走S1,S2,S3,S4,S5:
S0=5*S1+1
4*S1=5*S2+1
4*S2=5*S3+1
4*S3=5*S4+1
4*S4=5*S5+1

我们可以枚举桃子总数,S0,从S0=1开始枚举。

code:
 

#include<stdio.h>
#include <iostream>
void main()
{
	int s[6] = { 0 }, i;
	for (s[5] = 1;; s[5]++)
	{
		s[4] = 5 * s[5] + 1;
		if (s[4] % 4)
			continue;
		else
			s[4] /= 4;
		s[3] = 5 * s[4] + 1;
		if (s[3] % 4)
			continue;
		else
			s[3] /= 4;
		s[2] = 5 * s[3] + 1;
		if (s[2] % 4)
			continue;
		else
			s[2] /= 4;
		s[1] = 5 * s[2] + 1;
		if (s[1] % 4)
			continue;
		else
			s[1] /= 4;
		s[0] = 5 * s[1] + 1;
		break;
	}
	for (i = 1; i < 6; i++)
		printf("第%d个猴子将桃子分为5堆,每堆%4d个桃子.\n", i, s[i]);
	printf("共摘了%d个桃子, 剩下%d个桃子.\n", s[0], s[5] * 4);

	system("pause");
}

结果:

猜你喜欢

转载自blog.csdn.net/baidu_36669549/article/details/104151954