无解和无穷多解记flag最后集中处理了
记录:https://www.luogu.com.cn/record/141558770
代码```cpp #include<bits/stdc++.h> #include #define eps 1e-8 using namespace std; double a[110][110],b[110]; int main(){ int n,flag=0; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%lf",&a[i][j]); } scanf("%lf",&b[i]); } for(int i=1;i<=n;i++){ //找一个不为0的值 int fl2=0; for(int j=i;j<=n;j++){ if(fabs(a[j][i])>eps){ if(i!=j){ for(int k=i;k<=n;k++) swap(a[j][k],a[i][k]); swap(b[i],b[j]); } break; } if(j==n) flag=1,fl2=1; } if(fl2){ fl2=0; continue; } //把a[i][i]的值设为1 b[i]/=a[i][i]; for(int j=n;j>=i;j--) a[i][j]/=a[i][i]; //进行消元 for(int j=i+1;j<=n;j++){ b[j]-=b[i]*a[j][i]; for(int k=n;k>=i;k--){ a[j][k]-=a[j][i]*a[i][k]; } }//形成三角矩阵 } if(flag){ for(int i=n;i;i--){ for(int j=1;j<=n;j++){ if(fabs(a[i][j])>eps){ puts("0"); return 0; } } if(fabs(b[i])>eps){ puts("-1"); return 0; } } return 0; } for(int i=n;i;i--){ for(int j=i-1;j;j--){ b[j]-=a[j][i]*b[i]; a[j][i]-=a[j][i]; } } for(int i=1;i<=n;i++){ printf("x%d=%.2lf\n",i,b[i]); } return 0; }