cigarettes
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
- 描述
-
Tom has many cigarettes. We hypothesized that he has n cigarettes and smokes them
one by one keeping all the butts. Out of k > 1 butts he can roll a new cigarette.
Now,do you know how many cigarettes can Tom has?
- 输入
- First input is a single line,it's n and stands for there are n testdata.then there are n lines ,each line contains two integer numbers giving the values of n and k.
- 输出
- For each line of input, output one integer number on a separate line giving the maximum number of cigarettes that Peter can have.
- 样例输入
-
3 4 3 10 3 100 5
- 样例输出
-
5 14 124
题意就是:吸完烟后剩余的烟头每k个又可以换一个新的烟,换来的烟吸完后如果满足k个又可以继续换。。。问最终这个人能吸到多少根烟?
注意:一直错一直错一直显示答案错误就是因为10/3=9,而你没有要余出来的那个1,只使用了除法,觉得那一个不要也没事就舍去了,可一直通不过就是因为这种情况没有被考虑进去
因为有时候用烟头新换来的烟得到的烟头,再加上上次余出来没有拿出去换的烟头,可能与不加余出来的,这两种情况答案不一样。
正确代码:
#include<iostream> using namespace std; int main() { int m; cin>>m; while(m--) { int n,k,a,m,s; cin>>n>>k; s=n; a=n; while(a>=k) { m=a%k; a=a/k; s=s+a; a=a+m; } cout<<s<<endl; } return 0; }
优秀代码;
(确实很优秀,逻辑很清晰。。。)
#include "stdio.h" #include<fstream> int main() { //freopen("d:\\1.txt","r",stdin); //freopen("d:\\2.txt","w",stdout); int m; scanf("%d",&m); while(m--) { int n,k,sum; scanf("%d%d",&n,&k); sum=n; while(n/k) { sum+=n/k; n=n/k+n%k; } printf("%d\n",sum); } return 0; }