연립방정식의 해 x,y를 구하는 문제입니다.
-999에서 999까지 범위가 정해져있고 그 범위가 크지 않아 모든 경우의 수를 체크해도 되지만, 연립방정식을 풀어 x,y를 구하는 식을 만들어 활용했습니다.
코드는 다음과 같습니다.
int a, b, c, d, e, f, x, y;
std::cin >> a >> b >> c >> d >> e >> f;
x = (c * e - f * b) / (a * e - d * b);
y = (c * d - f * a) / (b * d - e * a);
std::cout << x << " " << y;
모든 경우의 수를 체크하는 방식입니다.
int a, b, c, d, e, f, x, y;
std::cin >> a >> b >> c >> d >> e >> f;
for (x = -999; x <= 999; x++)
{
for (y = -999; y <= 999; y++)
{
if (a * x + b * y == c && d * x + e * y == f)
{
std::cout << x << " " << y;
//return 0;
}
}
}
가장 먼저 소개한 방식의 과정을 모두 코드로 구현한 경우입니다. 가장 먼저 시도했던 방식이며, 이 방식으로도 정답이 뜨지만 효율적인 방식은 아닙니다.
int a, b, c, d, e, f, x, y;
int copyA, copyB, copyC, copyD, copyE, copyF;
int eq_A, eq_B, eq_C;
std::cin >> a >> b >> c >> d >> e >> f;
if (a != 0)
{
copyA = a * d;
copyB = b * d;
copyC = c * d;
copyD = d * a;
copyE = e * a;
copyF = f * a;
eq_B = copyB - copyE;
eq_C = copyC - copyF;
y = eq_C / eq_B;
if (a != 0)
x = (c - b * y) / a;
else
x = c - b * y;
}
else
{
copyB = b * e;
copyA = a * e;
copyC = c * e;
copyE = e * b;
copyD = d * b;
copyF = f * b;
eq_A = copyA - copyD;
eq_C = copyC - copyF;
x = eq_C / eq_A;
if (b != 0)
y = (c - a * x) / b;
else
y = c - a * x;
}
std::cout << x << " " << y;