rt,90pts,各种调试无果。
#include<bits/stdc++.h>
using namespace std;
#define MAXN 105
#define EPS 1e-6
double a[MAXN][MAXN],ans[MAXN];
int n;
bool gauss(){
int r=0;
for(int i=1;i<=n;i++){
r=i;
for(int j=i+1;j<=n;j++){
if(fabs(a[j][i])>fabs(a[r][i])){
r=j;
}
}
if(fabs(a[r][i])<EPS) return 0;
if(i!=r){
for(int j=i;j<=n+1;j++){
swap(a[r][j],a[i][j]);
}
}
double del=a[i][i];
for(int j=i;j<=n+1;j++){
a[i][j]/=del;
}
for(int j=i+1;j<=n;j++){
del=a[j][i];
for(int k=i;k<=n+1;k++){
a[j][k]-=a[i][k]*del;
}
}
}
ans[n]=a[n][n+1];
for(int i=n-1;i>=1;i--){
ans[i]=a[i][n+1];
for(int j=i+1;j<=n;j++){
ans[i]-=(a[i][j]*ans[j]);
}
}
return 1;
}
int main(){
cin >> n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n+1;j++){
cin >> a[i][j];
}
}
if(gauss()){
for(int i=1;i<=n;i++){
printf("x%d=%.2lf\n",i,ans[i]);
}
}
else{
for (int i = 1; i <= n; i++)
{
bool f = true;
for (int j = 1; j <= n; j++) if (a[i][j] != 0)
{
f = false;
break;
}
if (f && a[i][n + 1] != 0)
{
puts("-1");
return 0;
}
}
puts("0");
}
return 0;
}