Cod sursa(job #3357818)

Utilizator TestLicenta123Test Test TestLicenta123 Data 13 iunie 2026 15:15:25
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <fstream>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream fin("gauss.in");
ofstream fout("gauss.out");
int n, m, i, j, poz, p;
double sol[301], v[302][302], eps = 1e-9;
int main() {
    fin >> n >> m;
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= m + 1; j++) {
            fin >> v[i][j];
        }
    }
    i = j = 1;
    while (i <= n && j <= m) {
        poz = i;
        for (int k = i; k <= n; k++) {
            if (abs(v[k][j]) > eps) {
                poz = k;
                break;
            }
        }
        if (abs(v[poz][j]) < eps) {
            j++;
            continue;
        }
        if (poz != i) {
            for (int k = j; k <= m + 1; k++) {
                swap(v[i][k], v[poz][k]);
            }
        }
        double div = v[i][j];
        for (int k = j; k <= m + 1; k++) {
            v[i][k] /= div;
        }
        for (int k = i + 1; k <= n; k++) {
            double factor = v[k][j];
            for (int p = j; p <= m + 1; p++) {
                v[k][p] -= v[i][p] * factor;
            }
        }
        i++;
        j++;
    }
    for (j = 1; j <= m; j++) {
        sol[j] = 0;
    }
    for (i = n; i >= 1; i--) {
        int col = 0;
        for (j = 1; j <= m; j++) {
            if (abs(v[i][j]) > eps) {
                col = j;
                break;
            }
        }
        if (col == 0) {
            if (abs(v[i][m+1]) > eps) {
                fout << "Imposibil";
                return 0;
            }
            continue;
        }
        double sum = v[i][m+1];
        for (j = col + 1; j <= m; j++) {
            sum -= v[i][j] * sol[j];
        }
        sol[col] = sum;
    }
    for (j = 1; j <= m; j++) {
        fout << fixed << setprecision(10) << sol[j] << " ";
    }
    return 0;
}