高斯消元
const int N=1000+10; const ll MOD=1e9+7; #define eps 1e-6 double a[N][N]; int n; void jfc() { int hang,lie; for(hang=0,lie=0;lie<n;++lie) { //以列为标准消元(还剩几列--还剩几个才能出现单独参数) int t=hang; _f(i,hang+1,n-1)if((a[i][lie]-a[t][lie])>eps)t=i; swap(a[t],a[hang]); if(fabs(a[hang][lie])<=eps)continue; //否则开始消消乐 f_(i,n,lie)a[hang][i]/=a[hang][lie];//所有的都要除,包括得数 _f(i,hang+1,n-1) { f_(j,n,lie) { a[i][j]-=a[i][lie]*a[hang][j];//消掉其他的不是也系数化1!! } } hang++; } if(hang<n) { _f(i,hang,n-1)if(a[i][n]!=0)return -1; return 0; } f_(i,n-1,0)//删哪列 { f_(j,i-1,0)//删哪行 { a[j][n]-=a[i][n]*a[j][i]; a[j][i]=0; } } _f(i,0,n-1) if(fabs(a[i][n])<eps) chu("x%d=0\n",i+1); else chu("x%d=%.2lf\n",i+1,a[i][n]); } int main() { n=re(); _f(i,0,n-1) { _f(j,0,n) { double lin; scanf("%lf",&lin); a[i][j]=lin; } } jfc(); return 0; }