题目描述
小理的朋友有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k( k>1)个烟蒂可以换一个新的烟,那么小理的朋友最终能吸到多少根烟呢?
与某些脑筋急转弯不同的是,小理的朋友并不能从异次元借到烟蒂,抽完后再还回去。
输入:
每组测试数据一行包括两个整数 n,k(1<n,k≤108)。
输出:
对于每组测试数据,输出一行包括一个整数表示最终烟的根数。
样例输入1
4 3
样例输出1
5
样例输入2
10 3
样例输出2
14
提示:
对于 100% 的数据,1<n,k≤108。
来源/分类(难度系数:一星)
数学思维
完整代码展示:
a,b=map(int,input().split())
left=a//b
sum=a+left
while left>=b:
left=left//b
sum=sum+left
print(sum)
代码解释:
“a,b=map(int,input().split()) ”,让用户输入初始的烟数a和烟蒂兑烟的比例b。
“left=a//b
sum=a+left ”,令left为初始残留烟蒂数,left=a//b,sum为抽的烟总数,sum初始值为sum=a+left。
“while left>=b:
left=left//b
sum=sum+left ”,当left>=b时,令left=left//b(将剩余烟蒂以b的比例兑新烟),sum+=sum+left,直至left<b,跳出整个while循环。
“print(sum) ”,打印sum的最终值。
运行效果展示:
(声明:以上内容均为原创)
总结
### 文章内容总结**问题描述**:
这篇文章描述了一个数学问题,即给定一定数量的初始烟(n根)和一个特定的兑换比率k(k个烟蒂可以换一根新烟),求最终能吸到的烟的总根数。问题假设不能从外部借烟蒂,且所有计算基于数学逻辑进行。
**输入与输出**:
输入为两个整数n和k,分别代表初始烟的数量和烟蒂兑换比率。输出为最终能吸到的烟的总根数的整数表达。
**样例说明**:
- 样例输入1:`4 3`。表示有4根初始烟,每3个烟蒂可以换一根新烟。输出结果为5,因为一开始可以抽4根,留下4个烟蒂,这4个烟蒂又可以换1根新烟。
- 样例输入2:`10 3`。表示有10根初始烟,同样每3个烟蒂可以换一根新烟。输出结果为14,因为过程包括初始的10根烟、换得的3根新烟(由9个烟蒂换得,剩0个),再用这3根的烟蒂换1根新烟,总共14根烟。
**解题思路和实现**:
1. **初始化变量**:从输入中获取初始烟数`a`和兑换比率`b`,并计算初始时可以抽完的烟数及剩余烟蒂数(即`left = a // b`),此时总共能吸到的烟数为`sum = a + left`。
2. **循环兑换**:当剩余的烟蒂数量(`left`)可以满足兑换新烟的条件(即`left >= b`)时,通过整除操作`left //= b`计算可以兑换出的新烟数,并加到总烟数`sum`上。这一过程重复执行,直至无法满足兑换条件为止。
3. **输出结果**:打印最终能够吸到的烟的总数`sum`。
**代码展示与解释**:
代码通过Python语言实现,利用输入函数`input()`和分割函数`split()`获取用户输入的初始烟数`a`和兑换比率`b`。在主逻辑部分,首先根据`a`和`b`计算出初始的烟蒂数和可抽烟总数,然后通过一个`while`循环不断检查并更新剩余的烟蒂数和新抽的烟数,最后输出最终结果。
**运行效果**:
代码根据输入的不同,能够正确地计算出最终能吸到的烟的总数,并输出相应的结果。