Cod sursa(job #3302290)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 5 iulie 2025 20:05:04
Problema Algoritmul lui Gauss Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <fstream>
#include <iomanip>
using namespace std;

ifstream cin ("gauss.in");
ofstream cout ("gauss.out");

double v[305][305],v1[305];
double EPS=0.00000001;

int main () {
    int n,m,k;
    cin>>n>>m;
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=m+1; j++) {
            cin>>v[i][j];
        }
    }
    int i=1,j=1;
    while (i<=n && j<=m) {
        for (k=i; k<=n; k++) {
            if (-EPS>v[k][j] || v[k][j]>EPS) break;
        }
        if (k==n+1) {
            j++;
            continue;
        }
        if (k!=i) {
            for (int c=1; c<=m+1; c++) {
                swap(v[i][c],v[k][c]);
            }
        }
        for (int l=j+1; l<=m+1; l++) {
            v[i][l]=v[i][l]/v[i][j];
        }
        v[i][j]=1;
        for (int l=i+1; l<=n; l++) {
            for (int c=j+1; c<=m+1; c++) {
                v[l][c]-=v[i][c]*v[l][j];
            }
            v[l][j]=0;
        }
        i++;
        j++;
    }
    for (int i=n; i>=1; i--) {
        for (int j=1; j<=m+1; j++) {
            if (-EPS>v[i][j] || v[i][j]>EPS) {
                if (j==m+1) {
                    cout<<"Imposibil"<<'\n';
                    return 0;
                }
                v1[j]=v[i][m+1];
                for (int k=j+1; k<=m; ++k) {
                    v1[j]=v1[j]-v1[k]*v[i][k];
                }
                break;
            }
        }
    }
    for (int i=1; i<=m; i++) {
        cout<<fixed<<setprecision(8)<<v1[i]<<' ';
    }
    cout<<'\n';
}