
目的是消成上三角行列式
记住消元的顺序和步骤就好了
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 110;
const double eps = 1e-6;
int n;
double a[N][N]; //增广矩阵
int gauss(){
for(int i=1; i<=n; ++i){ //第i主元
for(int k=i; k<=n; ++k) //换非0行
if(fabs(a[k][i])>eps)
{swap(a[k],a[i]); break;}
if(fabs(a[i][i])<eps) return 0;
for(int j=n+1; j>=i; j--) //变1
a[i][j] /= a[i][i];
for(int k=i+1; k<=n; k++) //变0
for(int j=n+1; j>=i; j--)
a[k][j]-=a[k][i]*a[i][j];
}
for(int i=n-1; i>=1; i--) //回代
for(int j=i+1; j<=n; j++)
a[i][n+1]-=a[i][j]*a[j][n+1];
return 1; //存在唯一解
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++)
for(int j=1; j<=n+1; j++)
scanf("%lf",&a[i][j]);
if(gauss())
for(int i=1; i<n+1; i++)
printf("%.2lf\n", a[i][n+1]);
else puts("No Solution");
return 0;
}