题目链接:高斯消元解线性方程组
#include <iostream>
#include <algorithm>
#include <cmath>using namespace std;const int N = 110;
const double eps = 1e-8;int n;
double a[N][N];int gauss()
{int c, r;for(c = 0, r = 0; c < n; c++){// 找到每列中最大值的一行int t = r;for(int i = r; i < n; i++)if(fabs(a[i][c]) > fabs(a[t][c]))t = i;// 如果当前列中最大值是0,则寻找下一列if(fabs(a[t][c]) < eps) continue;// 在没有交换过的行中将最大值的那一行与当前行的数交换for(int i = c; i <= n; i ++) swap(a[r][i], a[t][i]);// 将最大的那一行的第一个数变成1for(int i = n; i >= c; i --) a[r][i] /= a[r][c];// 将该列其他行上的值变成0for(int i = r + 1; i < n; i ++)// 不为0才进行操作if(fabs(a[i][c]) > eps)for(int j = n; j >= c; j--)a[i][j] -= a[r][j] * a[i][c];r++;}for(int i = n - 1; i >= 0; i --)for(int j = i + 1; j < n; j++)a[i][n] -= a[i][j] * a[j][n]; if(r < n){for(int i = r; i < n; i ++)if(fabs(a[i][n]) > eps)return 2;return 1;}return 0;
}int main()
{cin >> n;for(int i = 0; i < n; i ++)for(int j = 0; j < n + 1; j ++)cin >> a[i][j];// 0 唯一解 1 无穷多解 2 无解int t = gauss();if(t == 0){for(int i = 0; i < n; i ++) printf("%.2lf\n", a[i][n]);}else if (t == 1) cout << "Infinite group solutions" << endl;else cout << "No solution" << endl;return 0;
}