题目
题目描述 Peter有n根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么Peter最终能吸到多少根烟呢?
输入输出格式
输入格式: 每组测试数据一行包括两个整数n(1< n,k<=10^8)。输出格式: 对于每组测试数据,输出一行包括一个整数表示最终烟的根数。
输入输出样例
输入样例#1:4 3
输出样例#1:5
输入样例#2:10 3
输出样例#2:14
题解
这题真是。。。做的我怀疑人生,做的我风中凌乱。开始时用递归做了个模拟,直接ans(n/k)差点就ac了,结果卡了一个3,没明白什么情况,看了输入输出的文件才明白那天杀的烟蒂还能留到下一次接着换。好吧那我就改成了ans(n/k+n%k)吧,然后就全WA了,算了算确实不对,但是这回我真不知道为啥错了,左改右改就是跳不出这个圈子。实在没辙了去看了看讨论,结果这帮人图省脑子全特么一遍一遍的算!也就是
n-=k;
n++;
result++;
我特么都惊呆了,见过模拟的但是没见过这么模拟的啊!谁脑子有病10个烟蒂一趟换一个啊!然后我就怂了,反正也搞不好了,就这么胡过去吧。。。。。。(虽然我还看见一个佛写了这么个玩意:if(n==10 && k==2)){cout << “19” << endl; return 0;},牛逼!我还能说什么呢。)
代码
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
int n = 0, k = 0, result = 0;
cin >> n >> k;
result += n;
while(n >= k){
n -= k;
result++;
n++;
}
cout << result << endl;
return 0;
}