高斯消元其实就是把增广矩阵化成三角矩阵的形状,然后回代答案的过程
有自由元即无唯一解
模板题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define fi first
#define se second
#define debug printf("aaaaaaaaaaa\n");
const int maxn=1e2+5,inf=0x3f3f3f3f,mod=51123987,mul=233;
const ll INF=0x3f3f3f3f3f3f3f3f;
const double eps=1e-7;
int n;
double a[maxn][maxn],x[maxn];
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]);
}
}
for(int i=1,pos;i<=n;i++){
for(pos=i;pos<=n;pos++){
if(fabs(a[pos][i])>eps){
break;
}
}
if(pos==n+1){
printf("No Solution\n");
return 0;
}
for(int j=1;j<=n+1;j++){
swap(a[pos][j],a[i][j]);
}
for(int j=i+1;j<=n;j++){
double p=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++){
a[j][k]-=p*a[i][k];
}
}
}
for(int i=n;i>=1;i--){
x[i]=a[i][n+1];
for(int j=i+1;j<=n;j++){
x[i]-=x[j]*a[i][j];
}
x[i]/=a[i][i];
}
for(int i=1;i<=n;i++){
printf("%.2f\n",x[i]);
}
return 0;
}