您的位置:首页 > 编程语言 > Python开发

平分七筐鱼

2016-07-16 00:00 423 查看
问题描述:

甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐只装了半筐鱼,另外7筐则是空的。由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量也是相等的。

在不将鱼倒出来的前提下,怎么将鱼和筐平分三份?

我的代码:

x=[]
y=[]
for i in range(1,6):
for j in range(1,6):
k=7-i-j
if k<=0:
break
else:
x.append([i,j,k])
for yu in x:
yu_sum=yu[0]*100+yu[1]*50+yu[2]*0
if yu_sum==350:
y.append(yu)
for yf1 in y:
for yf2 in y:
for yf3 in y:
if yf1[0]+yf2[0]+yf3[0]==7 and yf1[1]+yf2[1]+yf3[1]==7:
print yf1,yf2,yf3

结果:

[1, 5, 1] [3, 1, 3] [3, 1, 3]
[2, 3, 2] [2, 3, 2] [3, 1, 3]
[2, 3, 2] [3, 1, 3] [2, 3, 2]
[3, 1, 3] [1, 5, 1] [3, 1, 3]
[3, 1, 3] [2, 3, 2] [2, 3, 2]
[3, 1, 3] [3, 1, 3] [1, 5, 1]

我的思路:

已知有21个筐,三个渔夫,那么每个渔夫应分到7个筐。而且,7个筐装满了鱼(共700),7个筐装了一半的鱼(共350),7个筐没有鱼,又不能倒鱼,假设满的为100,一半的为50,空的为0,那么每个渔夫应分到(7x100+7x50+7x0)/3=350;

先保证每个渔夫有7个筐,其中第一个筐放的是100的,第二个筐放的是50的,第三个筐放的是0的,共有如下种可能(第一块的for循环):

[[1, 1, 5], [1, 2, 4], [1, 3, 3], [1, 4, 2], [1, 5, 1], [2, 1, 4], [2, 2, 3], [2, 3, 2], [2, 4, 1], [3, 1, 3], [3, 2, 2], [3, 3, 1], [4, 1, 2], [4, 2, 1], [5, 1, 1]]

根据上述关系再保证每个渔夫的鱼有350,共有如下种可能(第二块的for循环):

[[1, 5, 1], [2, 3, 2], [3, 1, 3]]

最后求出满足筐数位7且鱼有350关系的可能性:

[1, 5, 1] [3, 1, 3] [3, 1, 3]
[2, 3, 2] [2, 3, 2] [3, 1, 3]
[2, 3, 2] [3, 1, 3] [2, 3, 2]
[3, 1, 3] [1, 5, 1] [3, 1, 3]
[3, 1, 3] [2, 3, 2] [2, 3, 2]
[3, 1, 3] [3, 1, 3] [1, 5, 1]

示例代码:

for a in range(4):
for b in range(min(4, 7 - a + 1, a + 1)):
c = 7 - a - b
if c >= 4 or c > b:
continue
h = map(lambda x: int((3.5 - x) / 0.5), (a, b, c))
if sum(h) == 7:
print '-' * 20
for x, y in zip((a, b, c), h):
print x, y, 7 - x - y

结果:

--------------------
3 1 3
2 3 2
2 3 2
--------------------
3 1 3
3 1 3
1 5 1

代码分析:

解题思路:
1.我们可以计算得知,每人应得3.5框鱼
2.穷举每人拿到整框数,a, b, c
3.计算每人应拿半框数,ah, bh, ch,
4.ah + bh + ch == 7 ?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  平分七筐鱼 Python