3507 - 喵呜F
时间限制 : 1 秒
内存限制 : 128 MB
老喵呜要去买东西,结果结账的时候发现,店家没有零钱找!
不过对于任性的老喵呜来说,不找钱就不找呗,偶尔土豪一次又何妨,但是想一想,还是不能亏太多。
现在,他手头有两种金额的钱,分别是A和B,然后他需要付给店家N元,但是由于店家没有零钱,所以,如果A和B这两种金额的钱凑不出N,他就要给店家大于N的钱数。所以,他现在想知道,他最少要付多少钱。在此可以假设老喵呜有无限多个A元钱和B元钱。
题目输入
第一行输入一个数T,表示测试数据个数,对于每组数据,输入三个数N,A,B。(1<=N,A,B<=10^9)
题目输出
输出有T行,每一行表示一组测试数据的输出,对于每组测试数据,输出一个数,表示老喵呜最少要付的钱数。
输入/输出样例
输入格式
3 17 7 9 21 7 13 17 7 13
输出格式
18 21 20
C++解答
#include <stdio.h> #include <algorithm> using namespace std; int main() { //freopen("d.in","r",stdin); //freopen("d.out","w",stdout); int A,B,N,T; scanf("%d",&T); while(T--) { scanf("%d%d%d",&N,&A,&B); long long ans=1000000000000ll; if (A<B) swap(A,B); for (int i=0;i<=min(N/A+1,B);i++) { int forB=N-A*i; if (forB<0) ans=min(ans,(long long)A*i); else ans=min(ans,(long long)(B-forB%B)%B+N); } printf("%lld\n",ans); } }