#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<double>> A;
void ge() {
// Forward Elimination
for (int k = 0; k < n; k++) {
for (int i = k + 1; i < n; i++) {
double r = A[i][k] / A[k][k];
for (int j = k; j <= n; j++) {
A[i][j] -= r * A[k][j];
}
}
}
// Back Substitution
vector<double> ans(n);
for (int i = n - 1; i >= 0; i--) {
ans[i] = A[i][n];
for (int j = i + 1; j < n; j++) {
ans[i] -= A[i][j] * ans[j];
}
ans[i] /= A[i][i];
}
// Printing Result
cout << "\nSolutions:\n";
for (int i = 0; i < n; i++) {
cout << "x" << i + 1 << " : " << ans[i] << endl;
}
}
int main() {
cout << "Enter vars: \n";
cin >> n;
A = vector<vector<double>>(n, vector<double>(n + 1, 0));
cout << "Enter the augmented matrix (row-wise):\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j <= n; j++) {
cin >> A[i][j];
}
}
ge();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuOwp2ZWN0b3I8dmVjdG9yPGRvdWJsZT4+IEE7Cgp2b2lkIGdlKCkgewoJLy8gRm9yd2FyZCBFbGltaW5hdGlvbgoJZm9yIChpbnQgayA9IDA7IGsgPCBuOyBrKyspIHsKCQlmb3IgKGludCBpID0gayArIDE7IGkgPCBuOyBpKyspIHsKCQkJZG91YmxlIHIgPSBBW2ldW2tdIC8gQVtrXVtrXTsKCQkJZm9yIChpbnQgaiA9IGs7IGogPD0gbjsgaisrKSB7CgkJCQlBW2ldW2pdIC09IHIgKiBBW2tdW2pdOwoJCQl9CgkJfQoJfQoJCgkvLyBCYWNrIFN1YnN0aXR1dGlvbgoJdmVjdG9yPGRvdWJsZT4gYW5zKG4pOwoJZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgewoJCWFuc1tpXSA9IEFbaV1bbl07CgkJZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgbjsgaisrKSB7CgkJCWFuc1tpXSAtPSBBW2ldW2pdICogYW5zW2pdOwoJCX0KCQlhbnNbaV0gLz0gQVtpXVtpXTsKCX0KCgkvLyBQcmludGluZyBSZXN1bHQKCWNvdXQgPDwgIlxuU29sdXRpb25zOlxuIjsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJY291dCA8PCAieCIgPDwgaSArIDEgPDwgIiA6ICIgPDwgYW5zW2ldIDw8IGVuZGw7Cgl9Cn0KCmludCBtYWluKCkgewoJY291dCA8PCAiRW50ZXIgdmFyczogXG4iOwoJY2luID4+IG47CglBID0gdmVjdG9yPHZlY3Rvcjxkb3VibGU+PihuLCB2ZWN0b3I8ZG91YmxlPihuICsgMSwgMCkpOwoKCWNvdXQgPDwgIkVudGVyIHRoZSBhdWdtZW50ZWQgbWF0cml4IChyb3ctd2lzZSk6XG4iOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8PSBuOyBqKyspIHsKCQkJY2luID4+IEFbaV1bal07CgkJfQoJfQoKCWdlKCk7CglyZXR1cm4gMDsKfQ==