-
Notifications
You must be signed in to change notification settings - Fork 0
/
p01_monkeys.py
59 lines (51 loc) · 1.69 KB
/
p01_monkeys.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""
# -*- coding: utf-8 -*-
Author Wu Wentong
@Time : 2021/2/6 10:45 上午
@Site :
@File : p01_monkeys.py
@Software: PyCharm
"""
'''
五猴分桃问题
有五个猴子上山采桃,约定第二天来分桃。第二天早上来了一只猴子,他先把桃子分成了
五份,然后发现多了一个,就自己吃了,并且带走了自己的那份。过了一会又来了一只猴子,它
做了同样的动作,也吃了多出的一个桃子,带走了自己那份。后来的第二第四第五只猴子都是这
样做的,请问最初有多少个桃子。
思路:
1. 桃子数p=1
2. 如果p能被5个猴子分掉(函数),p就是桃子数目,程序结束
3. 否则p=p+1
4. 转2
p能否被5个猴子分掉函数
1. 猴子数m=1
2. 如果m<5, 则
a. 否则p=p-1
b. 如果p能被5整除,则:
p = p / 5 * 4
m = m + 1
转2
c. 否则(p不能被5整除),程序结束,返回"False"
3. 表示5个猴子都分完了,程序成功,返回"True"
'''
class SplitPeaches:
def __init__(self, monkeys):
"""
:param monkeys: 猴子的数目
"""
self.monkeys = monkeys
def dividable(self, p):
for _ in range(self.monkeys):
p -= 1
if p % self.monkeys == 0:
p = p // self.monkeys * (self.monkeys - 1)
else:
return False
return True
def get_peaches(self):
p = 1
while not self.dividable(p):
p += 1
return p
if __name__ == "__main__":
print(SplitPeaches(5).get_peaches()) # 返回5个猴子拿走的数目