问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升、32升、36升、38升、40升和62升,
并且只卖整桶酒,不零卖。第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的2倍。
那么,本来有多少升啤酒呢?
解析:由于该酒商只卖整桶酒,简单分析几个桶的容量可知,第二位顾客必须买走剩下的3桶葡萄酒才有可能是第一位顾客的2倍。
假设第一位顾客买走的葡萄酒共L升,那么第二位顾客买走的是2L升。也就是说,葡萄酒的总数应该能被3整除。所以,解法就呼之欲出了。

Python 解法1

1 buckets = {30,32,36,38,40,62}
2 total = sum(buckets)
3 for item in buckets:
4     if (total-item) % 3 == 0:
5         print(item)
6         break

虽然这样也能简单的解决问题,但是再考虑多一点,注意题目“只卖整桶”这个限制条件,更加规范的解法如下(但似乎没什么必要)

解法2

 1 buckets = {30,32,36,38,40,62}
 2 def solve(buckets):
 3     total = sum(buckets)
 4     for item in buckets:
 5         div,mod = divmod((total-item),3)
 6         if mod == 0:            
 7             for i in buckets:
 8                 j = div - i
 9                 if j!=i and (j in buckets):
10                     return (item,(i,j))
11     return 'no answer'
12
13 print(solve(buckets))

代码中第8行 因为第一个顾客买的是2桶酒之和,所以验证是否存在这2桶酒,假如不存在即返回no answer。

Java 实现(java底子比较浅,写起来代码很难看,如果有更好的写法希望能赐教一下)

 1 public static int bear(){
 2         int buckets[] = {30,32,36,38,40,62};
 3         int sum = 0;
 4         for(int bs :buckets){
 5             sum += bs;
 6         }
 7         for(int i=0;i<6;i++){
 8             int rest = sum-buckets[i];
 9             int mod = rest % 3;
10             if(mod == 0) {
11                 int div = rest / 3;
12                 for(int j=0;j<6;j++){
13                     int sep = div - buckets[j];
14                     if(sep != buckets[j] && InBuckets(sep,buckets)){
15                         return buckets[i];
16                     }
17                 }
18             }
19         }
20         return 0;
21     }
22
23 public static boolean InBuckets(int x,int[] buckets){
24         for(int i=0;i<buckets.length;i++){
25             if(x == buckets[i]){
26                 return true;
27             }
28         }
29         return false;
30     }

参考资料 微信号 Python_xiaowu

转载于:https://www.cnblogs.com/lateink/p/6431607.html

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. 携程2016技术培训生(机票研发部)面经

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

  5. 华为机试python打印机_华为校园招聘上机笔试题 扑克牌大小(python)

    本文为大家分享了华为校园招聘上机笔试题,供大家参考,具体内容如下 [编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各 ...

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

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

  7. Python列表模拟页面调度LRU算法(京东2016笔试题)

    问题描述:一进程刚获得3个主存块的使用权,若该进程访问页面的次序是1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.当采用LRU算法时,发生的缺页次数是多少? 解析:所谓LRU算法 ...

  8. python爬携程_用python selenium抓取携程信息

    最近在学习selenium,遇到一个很奇怪的问题,debug了半天还是没弄明白,我是在测试抓取携程网站的机票信息 我的代码: # -*- coding: utf-8 -*- from selenium ...

  9. python爬虫爬取携程国际机票航班信息,返回json串

    # -*- coding: utf-8 -*- import requests, json import hashlib import re# 此处的参数是json 出发三字码,达到三字码,出发时间, ...

最新文章

  1. 目标检测--Focal Loss for Dense Object Detection
  2. 面向过程的软件设计方法
  3. Halcon模板匹配之读取dxf文件生成xld与后续操作
  4. mysql左连接丢失null值的问题
  5. numpy库中ndarray切片操作的参数意义
  6. IE常见的CSS的BUG(一)
  7. 802.1X的wpa认证流程-------4-way handshake过程分析
  8. 中国餐饮连锁行业前景预测及未来战略规划建议报告2022年版
  9. java 继承和内部类_Java自学-接口与继承 内部类
  10. Linux下DRBD配置
  11. spring cloud 启动bean 循环依赖问题记录
  12. android+qq底部界面,Android 高仿QQ 界面滑动效果
  13. vscode 使用技巧(持续更新)
  14. oracle 相关1
  15. 微信第三方平台公众号授权
  16. Android应用程序开发期末大作业(2)
  17. 小程序毕设作品之微信小程序点餐系统毕业设计(7)中期检查报告
  18. 二进制文件vscode_最强编辑器 VSCode 系列之插件推荐【不定期更新】
  19. 讯飞tts文转语错误分析即解决方法
  20. 幼儿园计算机和网络安全情况,幼儿园网络安全自查报告

热门文章

  1. 百钱买百鸡问题python编程解决_百成大达物流单号查询
  2. linux启动参数怎么传给内核,如何启动内核(vivi与Linux kernel的参数传递情景分析)...
  3. oracle查询结果展示,ORACLE构造查询日期展示结果
  4. 文档转成html在线预览,java poi Word文档转为HTML文件 实现在线预览功能
  5. vivo硬件测试员干什么的_vivo的新年礼物:用APEX 2019告诉你5G旗舰机该长啥样
  6. html贪吃蛇怎么加蛇尾,贪吃蛇制作移动+pc
  7. excel打开空白不显示内容 没有隐藏_办公软件操作技巧097:如何隐藏excel表格中没有数据的空白区域...
  8. insert sort java_java插入排序 Insert sort实例
  9. oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效
  10. JavaScript 4行代码找出重复出现次数最多的元素及次数