0004-Simultaneous Equation
実装の概要
連立方程式を解くために今回はガウスの消去法を使いました。
ガウスの消去法 - Wikipedia
行列の基本変形をやや強引な方法で進めているので、読みにくくなって申し訳ありません。
aの値が0(テストケースにあるかは分かりませんが、条件上は除外されていません)だと基本変形を行う上で都合が悪いので、その場合は二つの方程式を入れ替えることができるようreverse[]という配列を準備しました。dについてはどのみち0にする予定なので0でも問題ありません。
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ String tmp = br.readLine(); if(tmp == null){ break; } String[] tmpArray = tmp.split(" "); double[] input = new double[6]; double[] reverse = new double[6]; for(int i = 0; i < 6 ; i++){ input[i] = Double.parseDouble(tmpArray[i]); reverse[(i + 3) % 6] = input[i]; } //もしa = 0なら上下の式を入れ替える if(input[0] == 0){ for(int i = 0; i < 6; i++){ input[i] = reverse[i]; } } //ここで行列の基本変形のようなことを行う double k = input[3]/input[0]; input[3] = 0; input[4] -= input[1]*k; input[5] -= input[2]*k; double k2 = input[4]; input[4] = 1; input[5] /= k2; double k3 = input[1]; input[1] = 0; input[2] -= input[5]*k3; input[2] /= input[0]; input[0] = 1; System.out.printf("%.3f %.3f\n", input[2], input[5]); } } }