描述
某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。
小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。
数据范围:输入的正整数满足 1≤n≤100
注意:本题存在多组输入。输入的 0 表示输入结束,并不用输出结果。
输入描述:
输入文件最多包含 10 组测试数据,每个数据占一行,仅包含一个正整数 n( 1<=n<=100 ),表示小张手上的空汽水瓶数。n=0 表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。
示例
输入:
3
10
81
0
输出:
1
5
40
说明:
样例 1 解释:用三个空瓶换一瓶汽水,剩一个空瓶无法继续交换
样例 2 解释:用九个空瓶换三瓶汽水,剩四个空瓶再用三个空瓶换一瓶汽水,剩两个空瓶,向老板借一个空瓶再用三个空瓶换一瓶汽水喝完得一个空瓶还给老板
代码
思路1: 传统轮询递归模式
python
def calcNum(n, zs = 0):
num = n // 3
y = n % 3
n2 = num + y
zs = zs + num
if n2 >= 3:
return calcNum(n2, zs)
if n2 == 2:
return zs + 1
if n2 < 2:
return zs
while(True):
try:
n = int(input())
if 1 <= n <= 100:
out = calcNum(n)
print(out)
elif n == 0:
break
else:
print("")
except:
break
思路2:特别巧妙的思路,因为题目特殊性,可以借,那么如果手里遗留两个空瓶子,其实可以再喝一瓶,手里只剩下一个空瓶则没希望了。那么我们转换思路,假设我手里全部两个一组分组,分好的每组借一个瓶子,刚好喝一瓶,喝完的瓶子还给商家。所以:
python
while True:
n = int(input())
if 1 <= n <= 100:
print(n // 2)
elif n == 0:
break
else:
print('数据不正确')
知识点
- 取余:%
- 取整数值,去掉小数部分://