首页 > 编程语言 >妙用Python集合求解啤酒问题(携程2016笔试题)

妙用Python集合求解啤酒问题(携程2016笔试题)

时间:2023-06-09 21:03:02浏览次数:34  
标签:葡萄酒 携程 Python buckets 40 item 顾客 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,buckets,40,item,顾客,2016,代码
From: https://blog.51cto.com/u_9653244/6451088

相关文章

  • Python两种方法求解登楼梯问题(京东2016笔试题)
    问题:假设一段楼梯共15个台阶,小明一步最多能上3个台阶,那么小明上这段楼梯一共有多少种方法?解析:从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,从第13个台阶上一步迈2个台阶上来,从第12个台阶上一步迈3个台阶上来),同理,第14个、13个、12个台阶都可以这样推算,从......
  • 大数据分析python
    #导库importnumpyasnpimportpandasaspd#读取数据data=pd.read_csv('logistics.csv')data.head(10)思路:直接查看不同公司的数量即可df1=data.groupby('货运公司名称').size().reset_index(name='count')#直接对货运公司的名称做统计(示例:天天速递25)df12.接通知对......
  • 使用Python编写简易定时器
    简单模拟了定时器功能,需要的朋友可以自己改写和扩充功能。importdatetimeimportwinsoundimporttimeimportrandomdefTimer(y,m,d,h,mu,s):'''参数分别为年、月、日、时、分、秒'''stopTime=datetime.datetime(y,m,d,h,mu,s)maxTime=stopTime+......
  • 使用Python寻找黑洞数
     黑洞数是指这样的整数:由这个数字每位上的数字组成的最大数减去每位数字组成的最小数仍然得到这个数自身。例如3位黑洞数是495,因为954-459=495,4位数字是6174,因为7641-1467=6174。本文重点在于内置函数sorted()和reversed()的用法。defmain(n):'''参数n表示数字的位数,例如n=3......
  • Python中的具名元组类用法
    >>>fromcollectionsimportnamedtuple>>>Point=namedtuple('Point',['x','y','z'])#创建具名元组类>>>Point<class'__main__.Point'>>>>p=Point(3,4,5)#实例化对象......
  • Python“制作”midi音乐“两只老虎”
    从网上找了很多谱子,可惜没有音乐细胞看不太懂,根据自己的理解改了好几遍,还是听不出来“两只老虎”的感觉,于是在标题上加了双引号。这样的话就只能了解本文思路了,算是抛砖引玉吧,重点是Python标准库winsound的Beep()函数可以发出37到32767赫兹之间频率的声音,其第二个参数为发声时长。f......
  • Python标准库zlib提供的数据压缩功能
    Python标准库zlib中提供的compress()和decompress()函数可以用于数据的压缩和解压缩,在压缩数据之前需要先想办法编码为字节串。>>>importzlib>>>x='Python程序设计系列图书,董付国编著,清华大学出版社'.encode()>>>len(x)72>>>y=zlib.compress(x)>>>len(y)#对于重......
  • Python使用Queue对象实现多线程同步小案例
    queue模块的Queue对象实现了多生产者/多消费者队列,尤其适合需要在多个线程之间进行信息交换的场合,实现了多线程编程所需要的所有锁语义。Queue对象主要实现了put()和get()方法,分别用来往队列尾部追加元素和在队列头部获取并删除元素。这两个方法都允许指定超时时间,其用法分别为put(......
  • Python统计多个Powerpoint文件中幻灯片总数量
    晚上吃饭时突然想知道自己做了多少页《Python程序设计》系列教材的配套PPT,于是就有了下面的代码,这套PPT综合了《Python程序设计基础》(ISBN:9787302410584)、《Python程序设计(第2版)》(ISBN:9787302436515)和《Python可以这样学》(ISBN:9787302456469)以及将要出版的《Python程序设计开发宝典......
  • Python计算序列中数字最大差值(美团2016校招笔试题)
    题目要求:给定一个包含若干数字的序列A(本文以列表为例),求满足0≤a≤b<n(其中n为序列长度)的A[b]-A[a]的最大值。编程要点:循环结构用法,切片,内置函数enumerate(),列表推导式。参考代码:fromrandomimportrandrangedefmaxDifference(lst):#负无穷大diff=-float('inf')......