【洛谷】3389 【模板】高斯消元法

題目傳送門

我當高斯消元是什麼神奇的算法啊,原來就是小學數學的解方程組……

高斯消元的核心思想就是消元……

對於第i 個方程,把第i 項的係數變成1 ,然後對第i+1n 個方程,通過等式的減法把第i 項的係數變成0

這樣一直到第n 行,顯然這是的等式就是an=b ,然後向上回代即可。

附上AC代碼:

#include <cstdio>
#include <cmath>
using namespace std;

const int N=110;
int n;
double a[N][N],ans[N],t;

int main(void){
    scanf("%d",&n);
    for (int i=1; i<=n; ++i)
        for (int j=1; j<=n+1; ++j)
            scanf("%lf",&a[i][j]);
    for (int i=1; i<=n; ++i){
        if (fabs(a[i][i])<=1e-8) return puts("No Solution"),0;
        t=a[i][i];
        for (int j=i; j<=n+1; ++j) a[i][j]/=t;
        for (int j=i+1; j<=n; ++j){
            t=a[j][i];
            for (int k=i; k<=n+1; ++k) a[j][k]-=a[i][k]*t;
        }
    }
    for (int i=n; i>=1; --i){
        ans[i]=a[i][n+1];
        for (int j=i+1; j<=n; ++j) ans[i]-=a[i][j]*ans[j];
    }
    for (int i=1; i<=n; ++i) printf("%.2f\n",ans[i]);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章