模板:高斯消元
#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; }