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;
}