以下是注释版代码:
# include <bits/stdc++.h>
# define ffor(i,name) \
for (auto i = name.begin (); i != name.end (); ++ i)
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
const double eps = 1e-7;
int n, sum, m;
double a[105][105], x[105], mul;
int main () {
// ios::sync_with_stdio (0);
//
// cin.tie (0);
//
// cout.tie (0);
cin >> n;
m = n + 1;
for (int i = 1; i < m; ++ i)
for (int j = 1; j <= m; ++ j)
cin >> a[i][j];
for (int i = 1; i < n; ++ i) {
if (fabs (a[i][i]) <= eps) //当前是0
for (int j = i + 1; j < m; ++ j)
if (fabs (a[j][i]) > eps) { //抓一个>0的来交换
swap (a[i], a[j]);
break ;
}
if (fabs (a[i][i]) <= eps) //整列都是0
continue ;
for (int j = i + 1; j < m; ++ j) {
mul = a[j][i] / a[i][i];
for (int k = i + 1; k <= m; ++ k)
a[j][k] -= mul * a[i][k];
}
}
for (int i = n; i; -- i) {
for (int j = i + 1; j < m; ++ j)
a[i][m] -= a[i][j] * x[j];
if (fabs (a[i][i]) <= eps) {
if (fabs (a[i][m]) <= eps) //0*x[i]=0,无穷多解
putchar ('0');
else //0*x[i]≠0,无解
puts ("-1");
return 0;
}
x[i] = a[i][m] / a[i][i];
}
for (int i = 1; i <= n; ++ i)
printf ("x%d=%.2lf\n", i, x[i]);
return 0;
}
/*
3
1 1 3 4
2 2 3 1
2 1 1 1
*/