题目描述
Peter 有 n 瓶酒,他每喝完一瓶酒就把瓶盖保存起来,k(k>1)个瓶盖可以换一瓶新酒,那么 Peter 最终能喝到多少瓶酒呢?
输入格式
每组测试数据一行包括两个整数 n,k(1<n, k≤10^8)。
输出格式
对于每组测试数据,输出一行包括一个整数表示最终烟的根数。
输入输出样例
输入 #1
4 3
输出 #1
5
输入 #2
10 3
输出 #2
14
说明/提示
对于 100% 的数据,1<n, k≤10^8。
代码如下:
#include<stdio.h>
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int newget = n;//每换一次后新得的酒
int sum = n;//总数
int layer = n;//每次瓶盖
while(newget!=0)
{
newget = layer/3;
sum += newget;
layer = layer/3 + layer%3;
if(layer<3) break;
}
printf("%d",sum);
return 0;
}
同样这题还可以建立方程直接求解,k个瓶盖== 1瓶酒+1个酒盖,得k-1瓶盖==1瓶酒,由此共有 n + (n-1)/(k-1)瓶酒(n-1是为了保证你先有一瓶酒拆出一个瓶盖去换)代码如下:
#include<stdio.h>
int main()
{
int n, k;
scanf("%d%d",&n,&k);
printf("%d",n+(n-1)/(k-1));
return 0;
}