洛谷 P3389 【模板】高斯消元法
阿新 • • 發佈:2020-10-20
洛谷 P3389 【模板】高斯消元法
題目背景
Gauss消元
題目描述
給定一個線性方程組,對其求解
輸入格式
第一行,一個正整數 nn
第二至 n+1n+1行,每行 n+1n+1 個整數,為a_1, a_2 \cdots a_na1,a2⋯a**n 和 bb,代表一組方程。
輸出格式
共n行,每行一個數,第 ii行為 x_ix**i (保留2位小數)
如果不存在唯一解,在第一行輸出"No Solution".
題解:
高斯消元模板題。
關於高斯消元,請走:
程式碼:
#include<cstdio> #include<algorithm> #include<cmath> using namespace std; const double eps=1e-6; int n; double a[110][110],b[110]; bool flag; int main() { 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++) { flag=0; for(int j=i;j<=n;j++) { if(flag) break; if(fabs(a[j][i])>eps) { for(int k=1;k<=n;k++) swap(a[i][k],a[j][k]); swap(b[i],b[j]); flag=1; } } if(!flag) { puts("No Solution"); return 0; } for(int j=1;j<=n;j++) { if(i==j) continue; double rate=a[j][i]/a[i][i]; for(int k=i;k<=n;k++) a[j][k]-=a[i][k]*rate; b[j]-=b[i]*rate; } } for(int i=1;i<=n;i++) printf("%.2lf\n",1.0*b[i]/a[i][i]); return 0; }