问题描述:一位酒商共有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笔试题)相关推荐

  1. Python求解啤酒问题(携程2016笔试题)

    问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升, 并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客 ...

  2. 携程2020笔试题——《买饮料》

    题目描述 游游今年就要毕业了,和同学们在携程上定制了日本毕业旅行.愉快的一天行程结束后大家回到酒店房间,这时候同学们都很口渴,是石头剪刀布选出游游去楼下的自动贩卖机给大家买可乐.贩卖机只支持硬币支付, ...

  3. 携程2016研发工程师笔试题

    携程2016研发工程师笔试题 2015/12/7 14:56(网上收集整理的,参考答案在后面,若有错误请大神指出) 1. 内存空间被分成不同区域,其中用函数 void*malloc(unsigned ...

  4. python 携程_请教两个关于使用 python 爬去哪儿,携程等机票网站的问题

    初学 python . 近期公司由于业务原因,需要想办法获取到携程与去哪儿的机票信息. 于是我尝试用 python+urllib 对这两个网站上的信息进行抓取. 去哪儿的爬虫代码如下:(初学 pyth ...

  5. 携程2016技术培训生(机票研发部)面经

    1.笔试 在线笔试,和腾讯笔试用的同一套系统,题目分为四部分,前三部分为智力题目,就是IQ测试那种题目.最后一部分是编程题目,难度中等. 2.一面(前端) 2016年4月某一天的下午,在实验室正准备去 ...

  6. python开发面试题目_Python测试开发面试笔试题

    Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...

  7. Python两种方法求解登楼梯问题(京东2016笔试题)

    问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法? 解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一 ...

  8. python 拼多多秒杀_关于 拼多多笔试题-简单易懂的秒杀服务

    实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endTime, int goodsId, int limitQuantit ...

  9. 这段代码,c 1秒,java 9秒,c# 14秒,而python。。。,java初级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. SPOJ375(树链剖分)
  2. 8279键盘扫描c语言程序,8279键盘显示C程序
  3. 世界机器人大会进入最后一天,最受市民关注的是它!
  4. 009_BeanUtils的使用
  5. 互联网 4 大发明之二维码,你如何使用 Python 生成二维码?
  6. HDU - 6635 Nonsense Time (暴力LIS)
  7. checkStyle -- 代码风格一致
  8. 语言 标签倾斜 绘图_一文搞懂ggplot2:老板再也不用担心我的科研绘图
  9. php 文件列表 浏览,简易文件目录浏览器PHP代码
  10. struts2基础梳理(二)
  11. Go语言与数据库开发:01-02
  12. 学习Mysql (一)
  13. 拓端tecdat|如何从xml文件创建R语言数据框dataframe
  14. 【githubboy】比较实用的 Python 翻译工具库,集成了谷歌、必应、有道、百度等多个翻译平台 API
  15. PHP简约聚合ZB盒子程序源码
  16. Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
  17. 简单易懂的颜色透明度计算
  18. html并排div可重叠,html – 并排堆叠div
  19. javascript学习(1)随机点名应用
  20. SecureCRT常用命令分享 SecureCRT命令大全

热门文章

  1. java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3
  2. mysql添加字典子项_如何使用executemany在MySQL中插入Python字典列表
  3. mysql workbench 数据备份_如何使用MySQL Workbench进行MySQL数据库备份?
  4. java canvas 画圆_java – 如何在Android中通过canvas绘制圆?
  5. linux主机设备acl,linux上的终端类型、ACL、PAM模块
  6. php伪协议漏洞_PHP之伪协议深入理解
  7. PCI、PCI-X、PCI-E AGP区别
  8. php mysql网页评论,PHP / MySQL:如何在您的网站中创建评论部分
  9. 工具箱锁打不开了怎么办_木门门锁坏了怎么办?维修小技巧在手不发愁
  10. 基于JAVA+SpringBoot+Mybatis+MYSQL的送水公司后台管理系统