rt,应该是无解判错了。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int N=300+5;
const double EPS=1e-8;
double a[N][N];
int iac[N],n,m,p,q;
bool freeopen[N];
void solve(){//消元
double qwq;
for (int i=1,j=1;i<=n && j<=m;++i){
for (int k=i+1;k<=n;++k)
if (a[k][j]){
for (int p=1;p<=m+1;++p) swap(a[i][p],a[k][p]);
break;
}
if (fabs(a[i][j])>=EPS){
for (int k=1;k<=n;++k){
if (i==k) continue;
qwq=a[k][j]/a[i][j];
for (int q=1;q<=m+1;++q){
a[k][q]=a[k][q]-a[i][q]*qwq;
}
}
iac[j]=i;
freeopen[j]=0;
}else{
--i;
}
++j;
for (int j=1;j<=n;++j){
bool f=1;
for (int k=1;k<=m;++k){
if (fabs(a[j][k])>=EPS){f=0;break;}
}
if (f && fabs(a[j][m+1])>=EPS){
cout<<"No Solution"<<endl;
exit(0);
}
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n;
m=n;
for (int i=1;i<=n;++i)
for (int j=1;j<=m+1;++j)
cin >> a[i][j];
for (int i=0;i<N;++i) freeopen[i]=1;
solve();
cout.flush();
for (int i=1;i<=m;++i){
if (freeopen[i]) printf("0.00\n");
else printf("%.2lf\n",a[iac[i]][m+1]/a[iac[i]][i]);
}
cout.flush();
return 0;
}