平分七筐鱼
2016-07-16 00:00
423 查看
问题描述:
甲、乙、丙三位渔夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有7筐装满了鱼,还有7筐只装了半筐鱼,另外7筐则是空的。由于他们没有秤,只好通过目测认为7个满筐鱼的重量是相等的,7个半筐鱼的重量也是相等的。
在不将鱼倒出来的前提下,怎么将鱼和筐平分三份?
我的代码:
结果:
[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]
示例代码:
结果:
--------------------
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 ?
甲、乙、丙三位渔夫出海打鱼,他们随船带了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动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法