首页 > 试题广场 >

汽水瓶

[编程题]汽水瓶
  • 热度指数:499640 时间限制: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 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板    
# 22题 空瓶问题 a_input = [] while True:
    a = input() if a != '0':
        a_input.append(a) else: break for i in a_input:
    i_int = int(i)
    n_sum = 0  zc = i_int // 3  ys = i_int % 3  two_sum = zc + ys
    n_sum += zc while two_sum >2 :
        i_int = two_sum
        zc = i_int // 3  ys = i_int % 3  two_sum = zc + ys
        n_sum += zc if two_sum == 2:
        n_sum += 1  print(n_sum)
发表于 2024-06-08 08:40:56 回复(0)
while 1:
    s1 = int(input())
    if s1 <= 2:
        break
    else:
        a = 0
        while (s1 >= 3):
            a += (s1 // 3)
            s1 = (s1 // 3) + (s1 % 3)
        if s1 == 2:
            a += 1
        print(a)

发表于 2024-06-02 15:35:46 回复(1)
94个瓶盖的时候能喝46瓶酒,答案有误
while True: try:
        mount=int(input()) if mount==0: break  rest=mount
        change,s=0,0  while rest>=3:
            change=rest//3  rest=rest%3+change
            s+=change print(s) except: break 

发表于 2024-05-27 16:08:41 回复(1)
"""
1. 循环接受输入,如果是0,则退出
2. 需要记录喝了多少和剩余瓶子

"""
isl = []
for i in range(10):
    n = int(input())
    if n == 0:
        break
    
    isl.append(n)


def count_m(num:int):
    e = 0
    m = 0
    if num <= 3:
        if num == 0:
            return 0
        if num == 2&nbs***bsp;num == 3:
            return 1
    else:
        m += num//3
        e = num//3 + num%3
        m += count_m(e)
    
    return m
    
for num in isl:
    r = count_m(num)
    print(r)



发表于 2024-05-09 18:58:04 回复(0)
import sys

for line in sys.stdin:
    line = int(line.strip())
    if line == 0:
        break
    # line: 剩下的瓶子
    sum = 0 # 总共兑换的数量
    num = 0 # 本次兑换数量
    while line >= 3:
        num = line // 3
        sum += num
        line = num + line % 3
    
    if (line + num) >= 3: # 剩下2个空瓶,上一次兑换数量大于1
        sum +=1
    # if line ==1 and num >= 2:
    #     sum += 1

    print(sum)

发表于 2024-05-08 17:41:30 回复(0)
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)