题目大意:你有N个可乐盖子,可以用A个盖子去换B瓶可乐。你可以向MM同学借任意多个瓶子,但是你一定要保证能按原数还给他。问你最多能喝到多少瓶可乐。
考察点:模拟,找规律(?)
思路分析:我们先将手中的N个盖子全换成可乐,对应的又会得到一些可乐,然后我们再用剩下的盖子和新得到的盖子去换可乐。。。这样一直下来之后,我们最多用log2N的复杂度换到不能再换,必须要借助MM同学了。假设我们现在手中还有S个盖子,那么每借一次MM同学,我们手中就会剩下b+s-a个盖子,也就是得到关系式s(n)=b+s(n-1)-a,求出s(n),当s(n)小于0时即为我们不能再换了,用之前喝到的可乐数加上n*b即可。
#include<stdio.h>
#include<stdlib.h>
long long n,a,b;
long long ans,k,s;
int main()
{
while (scanf("%d%d%d",&n,&a,&b)!=EOF)
{
ans=(n/a)*b;
s=n-(n/a)*a+(n/a)*b;
while (s>a)
{
ans=ans+(s/a)*b;
s=s-(s/a)*a+(s/a)*b;
}
ans=ans+(s/(a-b))*b;
printf("%d\n",ans);
}
return 0;
}