其实程序员还不如小学生
- bluecat - FeedzShare来自: keakon的涂鸦馆 - FeedzShare . 发布时间:2011年09月22日, 已有 2 人推荐. 今天在群里看到这样一道空瓶换汽水的题,引起了大家的讨论:. 说实话,当我看到这题时,我第一个想到的解法是极限. 假设每次都能整除,那么这题实际上相当于一个等比数列求和:第一次能喝的汽水数量是1000,公比是1/3,因此结果就是(1000 - 1000 * (1 / 3)n) / (1 - 1 / 3).
来自: keakon的涂鸦馆 - FeedzShare
发布时间:2011年09月22日, 已有 2 人推荐
# -*- coding: utf-8 -*-
def calculate(drinks):
total = 0
times = 0
bottles = 0
while drinks > 0:
times += 1
total += drinks
bottles += drinks
exchanged = bottles / 3
left = bottles % 3
bottles = left
print u'第%d次兑换,喝了%d瓶,兑换了%d瓶,剩%d个空瓶,共喝了%d瓶' % (times, drinks, exchanged, left, total)
drinks = exchanged
calculate(1000)
结果如下:第1次兑换,喝了1000瓶,兑换了333瓶,剩1个空瓶,共喝了1000瓶
第2次兑换,喝了333瓶,兑换了111瓶,剩1个空瓶,共喝了1333瓶
第3次兑换,喝了111瓶,兑换了37瓶,剩1个空瓶,共喝了1444瓶
第4次兑换,喝了37瓶,兑换了12瓶,剩2个空瓶,共喝了1481瓶
第5次兑换,喝了12瓶,兑换了4瓶,剩2个空瓶,共喝了1493瓶
第6次兑换,喝了4瓶,兑换了2瓶,剩0个空瓶,共喝了1497瓶
第7次兑换,喝了2瓶,兑换了0瓶,剩2个空瓶,共喝了1499瓶