妙用Python集合求解啤酒问题(携程2016笔试题)
问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升、32升、36升、38升、40升和62升,并且只卖整桶酒,不零卖。第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的2倍。那么,本来有多少升啤酒呢?
解析:由于该酒商只卖整桶酒,简单分析几个桶的容量可知,第二位顾客必须买走剩下的3桶啤酒才有可能是第一位顾客的2倍。假设第一位顾客买走的葡萄酒共L升,那么第二位顾客买走的是2L升。也就是说,葡萄酒的总数应该能被3整除。
buckets = {30, 32, 36, 38, 40, 62}
for item in buckets:
if sum(buckets - {item}) % 3 == 0:
print(item)
break
上面是第一版本的代码,写完再看了一眼,觉得还是啰嗦了,不够Pythonic,于是改成了下面的代码。
buckets = {30, 32, 36, 38, 40, 62}
total = sum(buckets)
for item in buckets:
if (total-item) % 3 == 0:
print(item)
break
第二段代码比第一段代码效率略高,作为题目本身而言,做到这里就足够了,但是写代码的话还是要考虑的更全面一些。上面两段代码都没有考虑到一个问题,那就是酒商只卖整桶酒。如果考虑到这个问题的话,代码就变成了下面的样子。
buckets = {30, 32, 36, 38, 40, 62}
def solve(buckets):
#适用于6桶酒问题
assert len(buckets)==6
#酒的总量
total = sum(buckets)
#枚举法,逐个测试哪个是啤酒
for item in buckets:
div, mod = divmod((total-item), 3)
#葡萄酒数量应能被3整除
if mod == 0:
#除以3之后的整商应恰为某2桶酒之和
for i in buckets:
j = div-i
if j!=i and (j in buckets):
return (item, (i,j))
return 'no answer'
print(solve(buckets))
本题答案是40
妙用Python集合求解啤酒问题(携程2016笔试题)相关推荐
- Python求解啤酒问题(携程2016笔试题)
问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升, 并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客 ...
- 携程2020笔试题——《买饮料》
题目描述 游游今年就要毕业了,和同学们在携程上定制了日本毕业旅行.愉快的一天行程结束后大家回到酒店房间,这时候同学们都很口渴,是石头剪刀布选出游游去楼下的自动贩卖机给大家买可乐.贩卖机只支持硬币支付, ...
- 携程2016研发工程师笔试题
携程2016研发工程师笔试题 2015/12/7 14:56(网上收集整理的,参考答案在后面,若有错误请大神指出) 1. 内存空间被分成不同区域,其中用函数 void*malloc(unsigned ...
- python 携程_请教两个关于使用 python 爬去哪儿,携程等机票网站的问题
初学 python . 近期公司由于业务原因,需要想办法获取到携程与去哪儿的机票信息. 于是我尝试用 python+urllib 对这两个网站上的信息进行抓取. 去哪儿的爬虫代码如下:(初学 pyth ...
- 携程2016技术培训生(机票研发部)面经
1.笔试 在线笔试,和腾讯笔试用的同一套系统,题目分为四部分,前三部分为智力题目,就是IQ测试那种题目.最后一部分是编程题目,难度中等. 2.一面(前端) 2016年4月某一天的下午,在实验室正准备去 ...
- python开发面试题目_Python测试开发面试笔试题
Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...
- Python两种方法求解登楼梯问题(京东2016笔试题)
问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法? 解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一 ...
- python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务
实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endTime, int goodsId, int limitQuantit ...
- 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。,java初级面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
最新文章
- SPOJ375(树链剖分)
- 8279键盘扫描c语言程序,8279键盘显示C程序
- 世界机器人大会进入最后一天,最受市民关注的是它!
- 009_BeanUtils的使用
- 互联网 4 大发明之二维码,你如何使用 Python 生成二维码?
- HDU - 6635 Nonsense Time (暴力LIS)
- checkStyle -- 代码风格一致
- 语言 标签倾斜 绘图_一文搞懂ggplot2:老板再也不用担心我的科研绘图
- php 文件列表 浏览,简易文件目录浏览器PHP代码
- struts2基础梳理(二)
- Go语言与数据库开发:01-02
- 学习Mysql (一)
- 拓端tecdat|如何从xml文件创建R语言数据框dataframe
- 【githubboy】比较实用的 Python 翻译工具库,集成了谷歌、必应、有道、百度等多个翻译平台 API
- PHP简约聚合ZB盒子程序源码
- Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
- 简单易懂的颜色透明度计算
- html并排div可重叠,html – 并排堆叠div
- javascript学习(1)随机点名应用
- SecureCRT常用命令分享 SecureCRT命令大全
热门文章
- java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3
- mysql添加字典子项_如何使用executemany在MySQL中插入Python字典列表
- mysql workbench 数据备份_如何使用MySQL Workbench进行MySQL数据库备份?
- java canvas 画圆_java – 如何在Android中通过canvas绘制圆?
- linux主机设备acl,linux上的终端类型、ACL、PAM模块
- php伪协议漏洞_PHP之伪协议深入理解
- PCI、PCI-X、PCI-E AGP区别
- php mysql网页评论,PHP / MySQL:如何在您的网站中创建评论部分
- 工具箱锁打不开了怎么办_木门门锁坏了怎么办?维修小技巧在手不发愁
- 基于JAVA+SpringBoot+Mybatis+MYSQL的送水公司后台管理系统