题目背景
温馨提醒:吸烟有害健康,请勿尝试吸烟!
题目描述
Peter 有 �n 根烟,他每吸完一根烟就把烟蒂保存起来,�k(�>1k>1)个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?
与某些脑筋急转弯不同的是,Peter 并不能从异次元借到烟蒂,抽完后再还回去。
输入格式
每组测试数据一行包括两个整数 �,�n,k(1<�,�≤1081<n,k≤108)。
输出格式
对于每组测试数据,输出一行包括一个整数表示最终烟的根数。
输入输出样例
输入 #1
4 3
输出 #1
5
输入 #2
10 3
输出 #2
14
想法
首先我们要清楚要求peter共用了几支烟
a为拥有 b为用多少可以换一个
我们可以列一个短式
a+a/b=吸的烟总数(max)
设a为10 b为3
那max为10+10/3
而结果要求整数
就可以先这样
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int max=0;
max=a+max;
}
剩下便是求a/b的整数了
可以利用a/=b来计算结果
理论成立 直接出题解
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int max=0;
max=a+max;
a/=b;
max=max+a;
cout<<max;
}
可是这样还会报错
优化一下就会发现
peter抽完烟后兑换烟 就会有一些没换
例如10 3
10+3=13
还有4个没有换 再次优化一下
if(a>=b){
a/=b;
max=max+a;
}
ok 加入原来的式子
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
int max=0;
max=a+max;
a/=b;
max=max+a;
if(a>=b){
a/=b;
max=max+a;
}
cout<<max;
}
这个还是有问题 太大不能解 换一种解法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,max=0,s=0;
cin>>a>>b;//输入
max=a;//复制a的值等于之前那个max=max+a
s=a;//这也是复制
while(s>=b)//s这里为a a要是小于b就无法再换
{
s-=b;//每换一次max的值+1
max++;
s++;//换一次后烟蒂数量+1
}
cout<<max;
return 0;
}
还是应该用循环来做 我大意了 用的除法 应该用枚举来用加减
这道题还是非常简单