分鱼问题

A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。日上三杆,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,保持走自己的一份。C、D、E依次醒来,也按同样的方法拿走鱼。问他们合伙至少捕了多少条鱼?

 1 #include <iostream>
 2 using namespace std;
 3 
 4 bool fun1(int n, int count)
 5 {
 6     if (0 == count)
 7     {
 8         return false;
 9     }
10     if (0 == n)
11     {
12         return true;
13     }
14     if (1 != (count % 5))
15     {
16         return false;
17     }
18     return fun1(n - 1, count / 5 * 4);
19 
20 }
21 int fun2(int n)
22 {
23     if (n == 1)
24     {
25         static int i = 0;
26         do
27         {
28             i++;
29         }
30         while (i % 5 != 1);
31         return i;
32     }
33     else
34     {
35         int t = 0;
36         do
37         {
38             t = fun2(n - 1);
39         }
40         while (t % 4 != 0);
41         return (t / 4 * 5 + 1) ;
42     }
43 }
44 int fun3(void)
45 {
46     bool flag = false;
47     for (int n = 6; ; n += 5)
48     {
49         int temp = n;
50         flag = true;
51         for (int j = 5; j > 0; --j)
52         {
53             if (temp % 5 != 1)
54             {
55                 flag = false;
56                 break;
57             }
58             temp = temp / 5 * 4;
59         }
60         if (flag)
61         {
62             return n;
63         }
64     }
65 }
66 int main()
67 {
68     for (int n = 0; true; ++n)
69     {
70         if (fun1(5, n))
71         {
72             cout << n << endl;
73             break;
74         }
75     }
76 
77     cout << fun2(5) << endl;
78     cout << fun3() << endl;
79 
80     return 0;
81 }

输出是:

3121
3121
3121

Process returned 0 (0x0)   execution time : 0.807 s
Press any key to continue.

 

posted on 2014-05-06 21:29  FlowingCloud  阅读(862)  评论(0编辑  收藏  举报

导航