空汽水瓶兑换汽水Python实现

描述

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是 5 瓶,方法如下:先用 9 个空瓶子换3瓶汽水,喝掉 3 瓶满的,喝完以后 4 个空瓶子,用 3 个再换一瓶,喝掉这瓶满的,这时候剩 2 个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用 3 个空瓶子换一瓶满的还给老板。如果小张手上有 n 个空汽水瓶,最多可以换多少瓶汽水喝?

数据范围:输入的正整数满足 

1<=n<=100

注意:本题存在多组输入。

允许如题面所述向老板借汽水。

输入的 0 仅表示输入结束,并不用输出结果

输入描述:

输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。

输出描述:

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1

输入:

3
10
81
0

复制输出:

1
5
40

复制说明:

样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换
样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一瓶汽水喝完得三个空瓶换一瓶汽水还给老板

这个题目说2个解法吧,第一个应该是聪明人的解法,对题目进行了升华

解法一:剩2个空瓶子时,可以先找老板借一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。 也就是说2个空瓶子即可换一瓶汽水喝,而且喝完之后手里也没有空瓶子。求解时直接把空瓶数除以2,即可得到正解。

while True: 
    n=int(input()) 
    if n==0:
        break 
    print(n//2)

 解法二:用n除以3求得整数a,余数b,a即兑换的汽水瓶数,b即剩余的空瓶,n=a+b重复除以3,直到n小于3

def drink(n):
    sum = 0
    while n >= 3:
        a,b=divmod(n,3)
        sum += a
        n=a+b
    return sum + 1 if n == 2 else sum

while True:
    n = int(input())
    if n == 0:
        break
    print(drink(n))

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值