刚回家不在状态吧。
说一下我一开始的思路。
首先 两边相等 c必为偶数。c&1
只计算一边就可以,最后的答案别忘了乘二。
下面就是我的错误所在,把a,b比大小,直接c/b c%b/a
的得到两个答案。果断wa。思来想去觉得没问题,找了别人的答案,一开始觉得没问题啊,可是既然别人用了for就一定有道理的,举个例子,3 5 19;根据我的方法是Impossible,但是其实答案是 3 2.
想明白也不容易。
#include <iostream>
#include<string>
#include<algorithm>
#include<stdio.h>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--) {
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (c & 1)
{
printf("Impossible\n");
} else
{
c /= 2;
int aa = max(a, b);
int bb = min(a, b);
int ansa, ansb;
bool flag = 0;
for (int i = c / aa; i >= 0; --i)
{
if (i * aa == c || (c - i * aa) % bb == 0)
{
ansa = i;
ansb = (c - i * aa) / bb;
flag = 1;
break;
}
}
if (flag)
{
if (a > b)
{
printf("%d %d\n", 2*ansa, 2*ansb);
} else
{
printf("%d %d\n", 2*ansb, 2*ansa);
}
} else
{
printf("Impossible\n");
}
}
}
return 0;
}