题意:小明有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;
}