I♥TLE

Java、オンラインジャッジなど

0004-Simultaneous Equation

問題(外部リンク)

Simultaneous Equation | Aizu Online Judge

実装の概要

連立方程式を解くために今回はガウスの消去法を使いました。
ガウスの消去法 - 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]);
		}
	}

}