BIT 1003 Exchange for Cola

题目大意:你有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;
}         


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值