Optimal Currency Exchange | 思维 | 水题

题意:小明有n个卢布,1美元可换d卢布,1欧元可换e卢布。但是,美元、欧元各有其币值。现在问你,小明如何换钱,可以使得最后手中剩余的卢布最少?

首先要理清一个问题,那就是,币值在这题里并没有意义。因为你用200的换,和用200张面值为1的换,结果是一样的。这题我们要做的是让剩下的卢布最少,而不是要让转换后的钱最少。
搞清楚这一点,就可以想明白我们的策略了,既然是要让原本货币剩余最少,那肯定是尽可能多的换。我们必然优先采取转换货币最小的面值来进行转换。所以前面给的一堆欧元美元的面值限制都是废话……
因为欧元的最小面值是5,所以换欧元的最小单位就算5* e,换美元的最小单位是1*d也就是d。
所以就尝试美元和欧元的组合就吼了。这里其实也不用考虑张数的问题,因为我们根本不关心换之后新货币的张数,所以只要%取余看看原本的货币的张数即可。之前我还写了判断整数的部分……完全没get到A题的点啊。

#include <bits/stdc++.h>

using namespace std;

int n, d, e, ans;

int main()
{
    scanf("%d %d %d", &n, &d, &e);
    //n个rubles 1个dollar=d个rubles 1个euro=e个rubles

    int dollarsmin = d,
        euromin = e*5;
    ans = n;
    for(int i = 0;i*dollarsmin <= n;i++)
    {
        //printf("i = %d   ans = %d\n", i, ans);
        ans = min(ans, (n - i*dollarsmin)%euromin);
    }

    printf("%d\n", ans);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值