洛谷_P3389 【模板】高斯消元法_高斯消元

洛谷_P3389 【模板】高斯消元法_高斯消元

//
#include<bits/stdc++.h>
using namespace std;

const double EPS=1e-7;
const int N=111;
double in[N][N];

int main()
{
    int i,j,k,n,maxa;
    double tt;
    
    while( cin>>n )
    {
        memset( in,0,sizeof( in ) );                    // init

        for( i=1;i<=n;i++ )
            for( j=1;j<=n+1;j++ )
                cin>>in[i][j];

        for( i=1;i<=n;i++ )
        {
            maxa=i;
            for( j=i+1;j<=n;j++ )
                if( fabs( in[j][i] ) > fabs( in[maxa][i] ) ) maxa=j;

            for( j=1;j<=n+1;j++ )
                swap( in[maxa][j],in[i][j] );

            if( fabs( in[i][i] )<EPS ) { cout<<"No Solution"<<endl; goto out; }

            for( j=n+1;j;j-- ) in[i][j]/=in[i][i];      // in[i][j]

            for( j=1;j<=n;j++ )
                if( j!=i )
                {
                    tt=in[j][i]/in[i][i];
                    for( k=1;k<=n+1;k++ ) in[j][k]-=in[i][k]*tt;
                }
        }
        for( i=1;i<=n;i++ ) printf("%.2lf\n",in[i][n+1] );
        out:;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/125339118