如题,目前是这个帖子给的 hack 全过。
#include<bits/stdc++.h>
using namespace std;
double a[55][55];
const double eps=1e-8;
int n;
int guess(){
int rk=0;
for(int i=1;i<=n;++i){
int r=i;
for(int k=i;k<=n;++k){
if(fabs(a[k][i])>eps){
r=k;
break;
}
}
if(r!=i)swap(a[i],a[r]);
if(fabs(a[i][i])<eps)continue;
rk++;
for(int j=n+1;j>=i;--j)a[i][j]/=a[i][i];
for(int k=i+1;k<=n;++k){
for(int j=n+1;j>=i;--j)a[k][j]-=a[i][j]*a[k][i];
}
}
for(int i=1;i<=n;++i){
bool flag=1;
for(int j=1;j<=n;++j)if(fabs(a[i][j])>eps)flag=0;
if(flag&&fabs(a[i][n+1])>eps)return -1;
}
if(rk<n)return 0;
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(){
cin>>n;
for(int i=1;i<=n;++i)for(int j=1;j<=n+1;++j)cin>>a[i][j];
int res=guess();
if(res==-1)cout<<-1;
else if(res==0)cout<<0;
else for(int i=1;i<=n;++i)cout<<"x"<<i<<"="<<fixed<<setprecision(2)<<a[i][n+1]<<"\n";
}