博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python求解啤酒问题(携程2016笔试题)
阅读量:5086 次
发布时间:2019-06-13

本文共 1759 字,大约阅读时间需要 5 分钟。

问题描述:一位酒商共有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

参考资料 微信号 Python_xiaowu

转载于:https://www.cnblogs.com/zhaohongtian/p/6807348.html

你可能感兴趣的文章
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
jQuery如何获得select选中的值?input单选radio选中的值
查看>>
设计模式 之 享元模式
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
15 FFT及其框图实现
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>