import java.util.Scanner;
public class GaussJordan {
public static void gaussJordan(double[][] mat, int n) {
for (int i = 0; i < n; i++) {
// Haciendo la diagonal principal igual a 1
for (int j = 0; j < n; j++) {
if (i != j) {
double ratio = mat[j][i] / mat[i][i];
for (int k = 0; k < n * 2; k++) {
mat[j][k] -= ratio * mat[i][k];
}
}
}
}
// Haciendo que los elementos de la diagonal sean 1
for (int i = 0; i < n; i++) {
double divisor = mat[i][i];
for (int j = 0; j < n * 2; j++) {
mat[i][j] /= divisor;
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Ingrese el tamaño de la matriz cuadrada (n): ");
int n = scanner.nextInt();
System.out.println("Ingrese los elementos de la matriz extendida (filas x columnas):");
double[][] mat = new double[n][n * 2];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n * 2; j++) {
mat[i][j] = scanner.nextDouble();
}
}
gaussJordan(mat, n);
System.out.println("La matriz resultante es:");
for (int i = 0; i < n; i++) {
for (int j = n; j < n * 2; j++) {
System.out.printf("%10.6f ", mat[i][j]);
}
System.out.println();
}
scanner.close();
}
}