60分求调

P2455 [SDOI2006] 线性方程组

xiongmy123 @ 2024-11-12 00:12:44

#include <bits/stdc++.h>
using namespace std;
#define double long double
int n,m;
const int MN=55;
double a[MN][MN];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        if(fabs(a[i][i])>0.0000001){
            double k=a[i][i];
            for(int j=1;j<=n+1;j++){
                a[i][j]/=k;
            }
        }
        for(int j=1;j<=n;j++){
            if(i==j)continue;
            double k=a[j][i];
            for(int p=1;p<=n+1;p++){
                a[j][p]-=k*a[i][p];
            }
        }
    }
//  for(int i=1;i<=n;i++){
//      for(int j=1;j<=n+1;j++)cout<<a[i][j]<<" ";
//      cout<<endl;
//  }
//  for(int i=1;i<=n;i++){
//      for(int j=1;j<=n+1;j++){
//          cout<<a[i][j]<<" ";
//      }
//      cout<<endl;
//  }
    for(int i=1;i<=n;i++){
        if(fabs(a[i][i])<0.000001){
            if(abs(a[i][n+1])<0.0000001){
                cout<<0;
                return 0;
            }
            if(fabs(a[i][n+1])>0.0000001)cout<<-1;
            return 0;
        }
    }
    for(int i=1;i<=n;i++){
        cout<<"x"<<i<<"=";
        cout<<fixed<<setprecision(2)<<a[i][n+1];
        cout<<endl;
    }
    return 0;
}

|