image
目的是消成上三角行列式
记住消元的顺序和步骤就好了

#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;
}