Python求解啤酒问题(携程2016笔试题)
问题描述:一位酒商共有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笔试题)相关推荐
- 妙用Python集合求解啤酒问题(携程2016笔试题)
问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升,并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的 ...
- 携程2020笔试题——《买饮料》
题目描述 游游今年就要毕业了,和同学们在携程上定制了日本毕业旅行.愉快的一天行程结束后大家回到酒店房间,这时候同学们都很口渴,是石头剪刀布选出游游去楼下的自动贩卖机给大家买可乐.贩卖机只支持硬币支付, ...
- 携程2016研发工程师笔试题
携程2016研发工程师笔试题 2015/12/7 14:56(网上收集整理的,参考答案在后面,若有错误请大神指出) 1. 内存空间被分成不同区域,其中用函数 void*malloc(unsigned ...
- 携程2016技术培训生(机票研发部)面经
1.笔试 在线笔试,和腾讯笔试用的同一套系统,题目分为四部分,前三部分为智力题目,就是IQ测试那种题目.最后一部分是编程题目,难度中等. 2.一面(前端) 2016年4月某一天的下午,在实验室正准备去 ...
- 华为机试python打印机_华为校园招聘上机笔试题 扑克牌大小(python)
本文为大家分享了华为校园招聘上机笔试题,供大家参考,具体内容如下 [编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各 ...
- Python两种方法求解登楼梯问题(京东2016笔试题)
问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法? 解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一 ...
- Python列表模拟页面调度LRU算法(京东2016笔试题)
问题描述:一进程刚获得3个主存块的使用权,若该进程访问页面的次序是1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.当采用LRU算法时,发生的缺页次数是多少? 解析:所谓LRU算法 ...
- python爬携程_用python selenium抓取携程信息
最近在学习selenium,遇到一个很奇怪的问题,debug了半天还是没弄明白,我是在测试抓取携程网站的机票信息 我的代码: # -*- coding: utf-8 -*- from selenium ...
- python爬虫爬取携程国际机票航班信息,返回json串
# -*- coding: utf-8 -*- import requests, json import hashlib import re# 此处的参数是json 出发三字码,达到三字码,出发时间, ...
最新文章
- 目标检测--Focal Loss for Dense Object Detection
- 面向过程的软件设计方法
- Halcon模板匹配之读取dxf文件生成xld与后续操作
- mysql左连接丢失null值的问题
- numpy库中ndarray切片操作的参数意义
- IE常见的CSS的BUG(一)
- 802.1X的wpa认证流程-------4-way handshake过程分析
- 中国餐饮连锁行业前景预测及未来战略规划建议报告2022年版
- java 继承和内部类_Java自学-接口与继承 内部类
- Linux下DRBD配置
- spring cloud 启动bean 循环依赖问题记录
- android+qq底部界面,Android 高仿QQ 界面滑动效果
- vscode 使用技巧(持续更新)
- oracle 相关1
- 微信第三方平台公众号授权
- Android应用程序开发期末大作业(2)
- 小程序毕设作品之微信小程序点餐系统毕业设计(7)中期检查报告
- 二进制文件vscode_最强编辑器 VSCode 系列之插件推荐【不定期更新】
- 讯飞tts文转语错误分析即解决方法
- 幼儿园计算机和网络安全情况,幼儿园网络安全自查报告
热门文章
- 百钱买百鸡问题python编程解决_百成大达物流单号查询
- linux启动参数怎么传给内核,如何启动内核(vivi与Linux kernel的参数传递情景分析)...
- oracle查询结果展示,ORACLE构造查询日期展示结果
- 文档转成html在线预览,java poi Word文档转为HTML文件 实现在线预览功能
- vivo硬件测试员干什么的_vivo的新年礼物:用APEX 2019告诉你5G旗舰机该长啥样
- html贪吃蛇怎么加蛇尾,贪吃蛇制作移动+pc
- excel打开空白不显示内容 没有隐藏_办公软件操作技巧097:如何隐藏excel表格中没有数据的空白区域...
- insert sort java_java插入排序 Insert sort实例
- oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效
- JavaScript 4行代码找出重复出现次数最多的元素及次数