描述
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?
汤姆有很多香烟。我们假设他有n支香烟,开始一支一支的抽起来,并且他保留了烟屁股。k个(k>1)烟屁股能够换一支新烟。现在,你知道汤姆一共能抽多少支烟吗?
输入
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.
首先,单行输入n,表示有n组数据。然后又n行,每行包括2个整数n、k。
输出
For each line of input, output one integer number on a separate line giving the maximum number of cigarettes that Peter can have.
对于每行的输入,在单独的每一行上输出一个整数,给出Peter可以拥有的最大香烟数量。
样例输入
3
4 3
10 3
100 5
样例输出
5
14
124
代码如下:
方法一
思路分析:
首先输入一个n,表示有n组数据要输入;然后,再输入两个数a、b,a表示一共有多少根烟,b表示多少个烟头可以换一根烟。
例如:
4 3:一共有四根烟,并且每3个烟头可以换一根烟
将4根烟,3个分成一组,可以分1组并且还剩余1根,而那所分成的一组3根烟所剩下的烟头又可以换一根烟,最后4(一共4根烟数)+1(其中可以分成的组的个数,即可以换的新烟数)+1(可以换1根)=6
4+1+1=6
10 3:同样的道理
将10根烟,每3根烟分成一组,可以分成3组剩余1根,这样可以再次换3根烟,新得到的3根烟和剩余的1根烟一共4根,够3根,这样又可以换1根,最后
10(一共10根烟)+3(可以分成3组,每一种3根)+1(可以换1根)=14
10+3+1=14
同理的100 5也是这个道理。
方法一:C++
#include<iostream>
using namespace std;
int main()
{int n;cin>>n;while(n--){int m,w,sum;scanf("%d%d",&m,&w);sum=m;while(m/w){ sum+=m/w; m=m/w+m%w; }cout<<sum<<endl;}
return 0;
}
方法一:Java
import java.util.Scanner;public class cigarettes {public static void main(String[] args) {int a,b,c;Scanner wsq = new Scanner(System.in);a=wsq.nextInt();while(a--!=0){int m,n,sum=0;m=wsq.nextInt();n=wsq.nextInt();sum=m;while(m/n !=0){sum=sum+m/n;m=m/n+m%n;}System.out.println(sum); }}
}
方法二:C++
#include<stdio.h>
int main()
{int n,a,b;scanf("%d",&n);while(n--){scanf("%d %d",&a,&b);printf("%d",a+(a-1)/(b-1));}return 0;
}