cigarettes

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

猜你喜欢

转载自blog.csdn.net/nanfengzhiwoxin/article/details/80086199