首页 > 试题广场 >

汽水瓶

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

输入描述:
\hspace{15pt}本题将会给出 1 \leqq T \leqq 10 组测试数据,确切数字未知,您需要一直读入直到特定的结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:

\hspace{15pt}在一行上输入一个整数 n \left(0 \leqq n \leqq 100\right) ,代表小张手上的空汽水瓶数量。特别地,n=0 代表输入结束,您只需要立即退出,不需要针对这种情况进行处理。


输出描述:
\hspace{15pt}对于每一组测试数据,新起一行。输出一个整数,代表小张最多可以喝到的汽水数量。
示例1

输入

3
10
81
0

输出

1
5
40

说明

\hspace{15pt}对于第一组测试数据,共有 3 个空瓶,可以换 1 瓶汽水。可以证明无法再做任何兑换,因此最多可以喝到 1 瓶汽水。

\hspace{15pt}对于第二组测试数据:
\hspace{23pt}\bullet\,第一轮兑换,共有 10 个空瓶。可以换 3 瓶汽水,余下 1 个空瓶;
\hspace{23pt}\bullet\,第二轮兑换,刚刚余下 1 个空瓶、加上刚刚兑换的 3 瓶汽水喝完,共有 4 个空瓶。可以换 1 瓶汽水,余下 1 个空瓶;
\hspace{23pt}\bullet\,第三轮兑换,刚刚余下 1 个空瓶、加上刚刚兑换的 1 瓶汽水喝完、再找老板借 1 个空瓶,共有 3 个空瓶。可以换 1 瓶汽水,余下 0 个空瓶。喝完之后不要忘记归还借的空瓶。
\hspace{15pt}综上,一共可以喝到 3+1+1=5 瓶汽水。
import sys

li = []
for line in sys.stdin:
    li.append(int(line))

for i in li:
    '' if i == 0 else print(i // 2)

发表于 2025-02-13 11:10:14 回复(0)
while True:
    try:
        n=int(input())    #空瓶数
        if n==0:
            break
        else:
            p=n//3    #空瓶兑换后喝到的汽水
            n=n%3+n//3    #喝完后剩余空瓶
            if n>2:
                while n > 2:
                    s=n//3
                    m=n%3
                    p+=s
                    n=m+s
            if n<2:
                p=p
            else:
                p+=1
            print(p)
    except:
        break
非递归,纯暴力
发表于 2025-02-08 16:50:33 回复(0)
while True:
    try:
        n = int(input()) #接收入参设有n个空瓶
        if n > 0 : #处理异常参数,若拥有空瓶数大于零进入处理逻辑
            res = [] #初始化返回值,一共能喝 res 瓶
            while n>=3:
                x = n // 3  #空瓶可兑换x瓶
                y = n %  3  #剩余空瓶数
                n = x + y   #每次次兑换后,剩余总空瓶数 重新赋值给n进入下一次循环
                res.append(x)
            if n == 2:
                res.append(1)
            print(sum(res))
    except:
        break
发表于 2024-12-25 12:15:03 回复(0)
def pingshu():
    n = int(input())
    b = 0
    if n != 0:
        while n > 1 :
            b = n//3 + b
            n = n//3 + n%3
            if n == 2 :
                b = b+1
                n = 0
        print(b)
while True:
    try:
        pingshu()
    except:
        break

发表于 2024-12-23 22:21:53 回复(0)
lst=list()
while True:
    lst.append(eval(input()))
    if lst[-1]==0:
        break
    else:
        print(lst[-1]//2)

发表于 2024-12-06 16:42:17 回复(0)
import sys
def A(intt):
    if intt < 3:
        return 0
    flag = 1
    summ = 0
    while flag == 1:
        if intt < 3:
            flag = 0
        if intt == 2:
            summ += 1
        else:
            summ += intt//3
            intt = intt//3 +intt%3
    return summ
for line in sys.stdin:
    intt = int(line.split()[0])
    if intt != 0:
        print(A(intt))
发表于 2024-11-25 00:12:06 回复(0)
import sys

for line in sys.stdin:
    n = int(line)   # 空瓶数
    if n != 0:
        drink = 0   # 可以喝的汽水瓶数
        while n >= 3:
            _drink, n = divmod(n, 3)
            n += _drink
            drink += _drink
        if n == 2:
            drink += 1
        print(drink)

发表于 2024-11-12 17:30:19 回复(0)
def max_sodas(empty_bottles):
    total_sodas = 0
    while empty_bottles >= 3:
        # 计算本轮汽水数量增加
        sodas = empty_bottles // 3
        total_sodas += sodas
        # 更新最新的空水瓶:上一轮剩余的空瓶+刚刚喝完的空瓶
        empty_bottles = empty_bottles % 3 + sodas
   
    # 如果有两个剩余的空,再借一个空的
    if empty_bottles == 2:
        total_sodas += 1
   
    return total_sodas

# 读取input中每一个element,到0停止
while True:
    empty_bottle = int(input().strip())
    if empty_bottle == 0:
        break
    print(max_sodas(empty_bottle))

发表于 2024-11-06 19:03:22 回复(0)
while True:
    try:
        n = int(input())
        if n == 0:
            break
        count = 0
        while n >= 3:
            new_drink = n // 3
            count += new_drink
            n = n % 3 + new_drink
        if n == 2:
            count += 1
        print(count)
    except:
        break
发表于 2024-11-01 14:02:20 回复(0)
import sys

for line in sys.stdin:
    res = 0
    line = int(line)
    if line>0:
        while line>=3:        
            x = line//3
            y = line%3
            line = x+y
            res+=x
        if line == 2:
            res+=1
        print(res)
    else:
        break

发表于 2024-10-10 17:42:48 回复(0)
import sys

for line in sys.stdin:
    n = int(line)
    drink = 0 
    if n != 0:     
        while n >= 3: 
            drink += n//3       
            n = n//3+n%3
        if n == 2:
            drink += 1
        print(drink)

发表于 2024-10-06 19:46:25 回复(0)
import sys

for line in sys.stdin:
    a = int(line.replace("\n", ""))
    b = 0
    while a >= 2:
        if a == 0:
            break
        b += a // 3
        a = a // 3 + a % 3
        if a == 2:
            # a = 3
            b += 1
            print(b)
            break
        if a == 1:
            print(b)
            break
        

发表于 2024-09-30 20:33:25 回复(0)
while True:
    n = int(input())
    if n == 0:
        break
    else:
        n = n // 2
        print (n)

发表于 2024-08-25 02:33:45 回复(0)
# 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)