模板:高斯消元

#include<cstdio>
#include<iostream>
using namespace std;
const int maxn = 110;
const int maxm = 110;
inline int qread() {
    register int x = 0, ch = getchar();
    while(!isdigit(ch))    ch = getchar();
    while(isdigit(ch))    x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar();
    return x;
}
double res[maxn], val[maxn][maxm];
int n, m;
int gause(){
    if(m != n + 1)    return 0;
    for(int i = 1; i < n; ++i)
        for(int j = i + 1; j <= n; ++j){
            double t = val[j][i] / val[i][i];
            for(int k = i; k <= m; ++k)
                val[j][k] -= t * val[i][k];
        }
    for(int i = n; i >= 1; --i){
        for(int j = n; j > i; --j)
            val[i][m] -= val[i][j] * res[j];
        if(!val[i][m])    return 0;
        res[i] = val[i][m] / val[i][i];
    }
    return 1;
}        
int main(void) {
    n = 3, m = 4;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            val[i][j] = qread();
    if(gause())
        for(int i = 1; i <= n; ++i)
            cout << res[i] << endl;
    else
        cout << "NO ANSWER!" << endl;
}

 

posted @ 2018-10-28 10:02  junk_yao  阅读(139)  评论(0编辑  收藏  举报