arrows blog

解いた問題などを適当に書いていきます。

AOJ 0004 Simultaneous Equation

問題概要

a, b, c, d, eが与えられたとき、
連立方程式
ax + by = c
dx + ey = f
を解き、x, yの値を求めよ。
なお、解は一意に定まる。

出力の際には、小数点第4位を四捨五入せよ。

制約

  • -1000 ≤ a, b, c, d, e ≤ 1000

解法

ガウスジョルダン法に投げる。

式変形をして、x, yについての式を導く。その結果は、以下のようになる。
x = {\displaystyle\frac{c × e - b × f}{a × e - b × d}}

y = {\displaystyle\frac{a × f - c × d}{a × e - b × d}}

これでx, yの値を得られる。

コード

#include <iostream>
  
using namespace std;
  
int main()
{
    double a, b, c, d, e, f;
    while (cin >> a >> b >> c >> d >> e >> f) {
        double x = (c * e - b * f) / (a * e - b * d);
        double y = (a * f - c * d) / (a * e - b * d);
        x *= 1000; x = x + (x > 0 ? 0.5 : -0.5); x = (int)x;
        y *= 1000; y = y + (y > 0 ? 0.5 : -0.5); y = (int)y;
        printf("%.3f %.3f\n", x / 1000, y / 1000);
    }
    return 0;
}