代码是这样的:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x[105][105];
long double a[105][105];
long double ans[105];
signed main(){
cin >> n;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n+1;j++)cin >> x[i][j];
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n+1;j++)a[i][j] = x[i][j]*1.0;
}
for(int i = 1;i<n;i++){
for(int j = 1;j<=n-i;j++){
if(a[j][n-i+1]==0)continue;
double x = a[j+1][n-i+1]/a[j][n-i+1];
if(x==0){
for(int k = 1;k<=n+1;k++)swap(a[j][k],a[j+1][k]);
continue;
}
for(int k = 1;k<=n+1;k++)a[j][k]*=x;
for(int k = 1;k<=n+1;k++)a[j][k]-=a[j+1][k];
}
}
for(int i = 1;i<=n;i++){
bool fp = 1;
for(int j = 1;j<=n;j++)if(a[i][j]!=0)fp = 0;
if(fp){
if(a[i][n+1]!=0)cout << "-1";
else cout << "0";
return 0;
}
}
for(int i = 1;i<=n;i++){
bool fp = 1;
for(int j = 1;j<=n;j++)if(a[j][i]!=0)fp = 0;
if(fp){
if(a[i][n+1]!=0)cout << "-1";
else cout << "0";
return 0;
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<i;j++){
a[i][n+1]-=ans[j]*a[i][j];
}
ans[i] = a[i][n+1]/a[i][i];
}
for(int i = 1;i<=n;i++)if(ans[i]==-0)ans[i] = 0;
for(int i = 1;i<=n;i++)printf("x%d=%.2Lf\n",i,ans[i]);
return 0;
}