首页 > 试题广场 >

汽水瓶

[编程题]汽水瓶
  • 热度指数:535565 时间限制: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 瓶汽水。
头像 虹色萤火虫
发表于 2020-08-25 12:11:11
知道这题优秀的解法,我真是裂开了。 题目描述中有讲到:剩2个空瓶子时,可以先找老板借一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。 也就是说2个空瓶子即可换一瓶汽水喝,而且喝完之后手里也没有空瓶子。求解时直接把空瓶数除以2,即可得到正解。
头像 陶陶2021
发表于 2021-09-22 22:45:51
想要换最多的汽水,就要厚脸皮,每两个空瓶向老板借一瓶汽水,喝完之后拿三个空瓶再换一瓶还给老板;相当于自己每两个空瓶可以换到一瓶汽水核心代码bottle/2 import java.util.Scanner; public class Main{ public static void main 展开全文
头像 牛客797476880号
发表于 2021-09-19 10:24:42
''' 这个题说了一大堆,最后你可以不要脸的问老板借一还一,双手叉腰走人,不留下一点垃圾。也就是说,只要去算你有的内不能整除就完事了 ''' while True: n=int(input()) if n==0:break print(n//2)
头像 张恒201901071908504
发表于 2022-02-08 17:17:51
因为可以借瓶子。 所以本质上就是满足两个瓶子就能和一瓶。 故总数除以2,取整就是要喝的。 #include<iostream> using namespace std; int main() { int n; while ( cin >> n ) 展开全文
头像 ~Marienbader
发表于 2020-02-21 19:25:56
实在是此类题目,多找找规律,傻乎乎递归写了好久 #include<iostream> using namespace std; int main() { int n; while (cin >> n && n != 0) { 展开全文
头像 江帆-
发表于 2021-10-31 12:06:47
离谱思路 有点离谱的思路,恰好是2个瓶子最终能换一瓶,所以直接整除2即可,但标准解决方案应该是使用递归的思路 import sys data = sys.stdin for x in data: x = int(x.strip()) if x != 0: print( 展开全文
头像 LongyuXie
发表于 2020-01-07 13:12:44
题目描述 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝 展开全文
头像 骑着骆驼🐫去看海
发表于 2022-02-04 00:20:01
递归思想解题,可以兑换的瓶数为空瓶整除以3,剩余的空瓶数量为空瓶整除以3加上空瓶整除以3的余数。 def max_bottles(n): result = n // 3 bottles = n // 3 + n % 3 if bottles == 2: # 空瓶数量为2,可 展开全文
头像 昵称到底占用没占用
发表于 2022-01-27 16:13:13
使用递归做法,不需要找规律,找规律是投机取巧罢了 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in 展开全文
头像 ArthurMorgan
发表于 2021-01-04 22:30:40
模拟+递归思路 这题其实我看到了楼上一个大佬的最简单解法,通过逻辑推理,只要把初始空瓶除以二即可,真可以说是太秀了。但愚笨的我还是按照标准的模拟思路来接题吧。其实这题最难的并非逻辑,而是把这个逻辑转化成编程语言,题目的逻辑就在题目里,这时候我们更像是做一份翻译工作。 逻辑分析 我们不妨就按题目假设的 展开全文