Description
铭宝宝喜欢举重运动,他有一个杠铃杆(重量忽略),和2种类型的杠铃片(重量分别为a和b),每种杠铃片都有无限个。铭宝宝打算用这2种杠铃片组成重量为C的杠铃(杠铃必须平衡),他想让你告诉他,应该如何组合
Input
输入一个正整数T(1≤T≤1000)表示测试组数,每组测试数据输入3个正整数a, b, C(0 < a,b,C≤1000), 表示2种杠铃片的重量,以及杠铃的重量。
Output
如果不能够组成重量为C的杠铃,输出Impossible。否则输出2个数,表示需要a杠铃片的数量,和b杠铃片的数量。(如果有多种答案,输出a+b最小的方案)
Sample Input
2
1 2 6
1 4 5
Sample Output
2 2
Impossible
Solution
简单题,暴力枚举a的数量选出最小值即可
Code
#include<cstdio>
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int main()
{
int T,a,b,c;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&a,&b,&c);
if(c&1)
{
printf("Impossible\n");
continue;
}
c/=2;
int x=1111,y=1111;
for(int i=0;a*i<=c;i++)
if((c-a*i)%b==0)
{
int j=(c-a*i)/b;
if(i+j<x+y)x=i,y=j;
}
if(x==1111&&y==1111)printf("Impossible\n");
else printf("%d %d\n",2*x,2*y);
}
return 0;
}