您的位置:首页 > 其它

猴子分桃问题

2011-10-12 22:21 567 查看

问题描述:

五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;......其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?

思路分析:

设桃子总数为S,第一只猴子分得和桃子为x5,第二只猴子为x4……第五只猴子为x1

S = 5 * x5 + 1;

4 * x5 = 5 * x4 + 1;

……

4 * x2 = 5 * x1 + 1;

于是有:

4(x5 + 1) = 5(x4 + 1), 4(x4 + 1) = 5(x3 + 1)..., 4(x2+1) = 5(x1 + 1)

所以有:(x5 + 1) = (5/4)^4 * (x1 + 1) --> (x1 + 1) = (4/5)^4 * (x5 + 1)

由于x1必须整数,所以x5 = 5^4 - 1 = 624

S = 5 * x5 + 1 = 624 * 5 + 1 = 3121

代码示例:

1 #include
<stdio.h>

2 #include
<stdlib.h>

3

4 int monkey_peach(int n)

5 {

6 int *p;

7 int i;

8

9 p = (int *)malloc(n *
sizeof(int));

10 if (p ==
NULL)

11 return -1;

12

13 p[0] =
1;

14

15 while (1)

16 {

17 for (i =
1; i < n; i++)

18 {

19 if ((p[i-1] *
5 + 1) %
4 != 0)

20 break;

21 p[i] = (p[i-1] *
5 + 1) /
4;

22 }

23

24 if (i >= n)

25 break;

26 p[0]++;

27 }

28

29 for (i =
0; i < n; i++)

30 {

31 printf("%d ", p[i]);

32 }

33 printf("\n");

34 printf("peach count =
%d.\n",
5 * p[n-1] +
1);

35 return 0;

36 }

37

38 int main()

39 {

40 monkey_peach(5);

41 return 0;

42 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: