首页 > 试题广场 >

汽水瓶

[编程题]汽水瓶
  • 热度指数:494612 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足

注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。

输入描述:

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



输出描述:

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

示例1

输入

3
10
81
0

输出

1
5
40

说明

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

while (n := int(input())) != 0:
    count = 0
    if n < 3:
        print(count)
        break
    else:
        while n >= 3:
            n = n - 3 + 1
            count += 1
            if n == 2:
                n += 1
    print(count)

编辑于 2024-04-16 00:17:51 回复(0)
def get_water(bottle: int, water: int = 0):
    if bottle <= 1:
        return water
    elif bottle == 2:
        water += 1
        bottle -= 2
        return water
    elif bottle >= 3:
        water += 1
        bottle -= 2
        return get_water(bottle, water)

while True:
    bottle = eval(input())
    if bottle == 0:
        break
    print(get_water(bottle))

发表于 2024-04-15 21:09:27 回复(0)
def canDrinkbottles(emptybottles:int):
    global canbs
    global lastebs
    if emptybottles<=1:
        return print(canbs)
    elif emptybottles ==2:
        return print(canbs+1)
    else:
        canbs = canbs + emptybottles//3
        lastebs = emptybottles//3 + emptybottles%3
        # print(f'换取的瓶数和剩余空瓶数:{emptybottles//3},{emptybottles%3},总空瓶数:{lastebs},已换取总瓶数:{canbs}')
        canDrinkbottles(lastebs)

while True:
    inp = int(input())
    if inp ==0:
        break
    canbs = 0
    lastebs = 0    
    canDrinkbottles(inp)

编辑于 2024-04-08 11:57:36 回复(0)
#最简单的思路了,两个空瓶借一个空瓶就能换一瓶汽水,只有一瓶不能借
while n:=int(input()): print(n//2)
编辑于 2024-01-13 16:56:55 回复(0)
# 方法一:常规方法
for i in range(10):
    a, s = int(input()), 0
    while True:
        if a < 2:  # 小于2瓶,则不够兑换
            break
        elif a == 2:  # 等于两瓶,可以就借一瓶,然后归还
            s += 1
            break
        else:  # 其他则正常处理
            n, m = a // 3, a % 3
            s += n
            a = n + m
    print(s)

# 方法二:每两瓶借一瓶,然后归还,即喝一瓶,又没有剩余瓶子,而不足两瓶的也无法兑换
for i in range(10):
    a = int(input())
    if a == 0:
        break
    else:
        print(a // 2)

编辑于 2023-12-15 15:44:18 回复(0)
def drink(b):
    count = int(b / 3) #喝到的数量
    b = b % 3 + count  #空瓶的数量=喝到+余下的
    if b >= 3:         #递归
        count += drink(b)
    if b == 2:         #余两个空瓶可以借一瓶汽水还三个空瓶情况
        count += 1
    return count


while 1:
    bottle = int(input())
    count = 0
    empBott = 0
    if bottle == 0:
        break
    else:
        print(drink(bottle))

发表于 2023-11-30 11:48:51 回复(0)
for line in sys.stdin:
    a = line
    if int(a) != 0 :
        b = 0 
        while int(a) > 1:
            m ,n = (int(a)//3), (int(a) % 3)
            b = b + m
            a = m + n
            if m + n == 2:
                b += 1
                break
        print(b)

发表于 2023-10-11 03:21:34 回复(0)
flag = 1
N = 10
while flag == 1 and N > 0:
    n = int(input())
    if 1<=n<=100:
        print(n//2)
    elif n == 0:
        flag = 0
    else:
        print('请输入1-100之间的整数')
    N = N -1

发表于 2023-09-17 12:14:46 回复(0)
def change(num):
      num1=num//2
      return num1
while True:
      n=int(input())
      if n==0:
         break
      print(change(n))
发表于 2023-08-09 16:36:36 回复(0)
empty = int(input())
while empty != 0:
    sum = 0
    while(empty >= 3):
        new_drink = empty // 3
        residual_empty = empty % 3
        sum += new_drink
        empty = new_drink + residual_empty
    if empty == 2: # 若换到最后只剩两个空瓶,则借一个空瓶换一个新饮料,喝完还给老板一个空瓶子
        sum += 1
    print(sum)
    empty = int(input())

发表于 2023-08-07 16:21:39 回复(0)
换法有两种:
    3个瓶盖换一瓶
    2个瓶盖赊一瓶
直接选择最方便的赊账方法
for line in sys.stdin:
    a =int(line.strip())
    if a!=0:
        print (int(a/2))


发表于 2023-07-26 10:43:49 回复(2)
n=int(input())
while n!=0:
    c=0
    if n>100:
        n=int(input(()))
    elif n==1:
        print(0)
    elif n==2:
        print(1)
    else:
        while n not in [0,1,2]:
            a=n%3
            b=int(n/3)
            n=a+b
            c=c+b
            if n in [0,1]:
                print(c)
            elif n==2:
                print(c+1)
            else:
                continue
    n=int(input())
发表于 2023-07-24 21:11:05 回复(0)
while True:
    num = int(input())
    if num != 0:
        print(num // 2)
    else:
        break


发表于 2023-07-12 11:42:33 回复(0)
list1 = []
while True:
    n = int(input())
    if n == 0:
        break
    list1.append(n)
for a in list1:
    if a == 1:
        print(0)
    elif a == 2:
        print(1)
    else:
        empty = a
        all_drink = 0
        while empty >= 3:
            drink = empty//3
            empty = drink + empty % 3
            all_drink += drink
        if empty == 2:
            all_drink += 1
        print(all_drink)
发表于 2023-07-10 20:06:05 回复(0)
he = {"tol": 0}
def wyp(aa):
    if int(aa/3)+aa%3 == 1:
        he["tol"] = he.get("tol")+int(aa/3)
    elif int(aa/3)+aa%3 == 2:
        he["tol"] = he.get("tol") + int(aa/3) + 1
    else:
        he["tol"] = he.get("tol") + int(aa/3)
        wyp(int(aa/3)+aa%3)
list1 = []
while True:
    num = int(input())
    if num == 0:
        break
    else:
        list1.append(num)
for i in list1:
    wyp(i)
    print(he.get("tol"))
    he["tol"] = 0

发表于 2023-07-04 22:59:46 回复(0)
def count(num):
    global soda_count
    main_num = num // 3
    leave_num = num % 3
    soda_count += main_num  # 瓶子是3的倍数,换汽水
    num = main_num + leave_num  # 喝完的汽水瓶子和余数瓶子,当前持有的瓶子总数
    if num >= 2:
        if num == 2:
            num += 1  # 借瓶子
        count(num)
    else:
        return


flag = True
while flag:
    input_num = int(input())
    if input_num != 0:
        soda_count = 0
        count(input_num)
        print(soda_count)
    else:
        flag = False

发表于 2023-07-04 17:08:25 回复(0)