【模板】高斯消元
代码如下
#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int n;
double g[maxn][maxn];
void read_and_parse(){
scanf("%d",&n);
for(int i=1;i<=n;i++)for(int j=1;j<=n+1;j++)scanf("%lf",&g[i][j]);
}
void solve(){
for(int i=1;i<=n;i++){
int now=i;
for(int j=i+1;j<=n;j++)if(fabs(g[now][i])<fabs(g[j][i]))now=j;//找到一个系数最大的行,可以减少精度误差
if(i!=now)for(int j=i;j<=n+1;j++)swap(g[i][j],g[now][j]);
if(g[i][i]==0){
printf("No Solution\n");
return;
}
for(int j=i+1;j<=n;j++){
double z=g[j][i]/g[i][i];
for(int k=i;k<=n+1;k++)g[j][k]-=z*g[i][k];
}
}
for(int i=n;i>=1;i--){//加入回代过程,可以减少精度误差
for(int j=i+1;j<=n;j++)g[i][n+1]-=g[i][j]*g[j][n+1];
g[i][n+1]/=g[i][i];
}
for(int i=1;i<=n;i++)printf("%.2lf\n",g[i][n+1]);
}
int main(){
read_and_parse();
solve();
return 0;
}

更多精彩