每日模板一練——高斯消元
阿新 • • 發佈:2018-12-18
RT
#include<bits/stdc++.h> using namespace std; const int MAXN=105; const double eps=1e-3; int n; double a[MAXN][MAXN]; double ans[MAXN]; void gauss(){ int i,j,k; for(i=1;i<=n;++i){ for(j=i;j<=n&&!a[j][i];++j); if(i!=j){ for(k=i;k<=n+1;++k) swap(a[i][k],a[j][k]); } for(j=i+1;j<=n;++j){ for(k=n+1;k>=i;--k){ a[j][k]-=a[i][k]/a[i][i]*a[j][i]; } } } for(int i=n;i;--i){ ans[i]=a[i][n+1]; for(j=i+1;j<=n;++j) ans[i]-=a[i][j]*ans[j]; ans[i]/=a[i][i]; } } int main(){ cin>>n; for(int i=1;i<=n;++i) for(int j=1;j<=n+1;++j) scanf("%lf",&a[i][j]); gauss(); for(int i=1;i<=n;++i){ printf("%d ",(int)(ans[i]+eps)); } return 0; }