//
#include<bits/stdc++.h>
using namespace std;
const double EPS=1e-7;
const int N=111;
double in[N][N];
int main()
{
int n,i,j,k,maxa;
double tt; // double
while( cin>>n )
{
memset( in,0,sizeof( in ) );
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; // j=i+1
for( j=i+1;j<=n;j++ ) // 找到该列最大系数 (1)
if( fabs( in[j][i] )>fabs( in[maxa][i] ) ) maxa=j;
// j<=n+1
for( j=1;j<=n+1;j++ )
swap( in[maxa][j],in[i][j] ); // 交换行 (2)
// 对角线的主元系数为0 没有唯一解
if( fabs( in[i][i] )<EPS ) { cout<<"-1"; goto out; }
// 该行同除主元系数 从后往前 不然in[i][i]提前变化 (3)
for( j=n+1;j;j-- ) in[i][j]/=in[i][i];
for( j=1;j<=n;j++ ) // 该列其他系数置零 (4)
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/125172532
今日推荐
周排行