#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
#define maxn 100
#define fabs(x) ((x)>0?(x):-(x))
#define eps 1e-10
int gauss_cpivot(int n,double a[][maxn], double b[])
{
int i,j,k,row;
double maxp,t;
for(k=0;k<n;k++)
{
for(maxp=0,i=k;i<n;i++)
{
if(fabs(a[i][k])>fabs(maxp))
maxp = a[row=i][k];
}
if(fabs(maxp)<eps)return 0;
if(row != k)
{
for(j=k;j<n;j++)
t=a[k][j],a[k][j]=a[row][j],a[row][j]=t;
t=b[k],b[k]=b[row],b[row]=t;
}
for(j=k+1;j<n;j++)
{
a[k][j] /= maxp;
for(i=k+1;i<n;i++)
a[i][j]-=a[i][k]*a[k][j];
}
b[k] /= maxp;
for(i=k+1;i<n;i++)
b[i]-=b[k]*a[i][k];
}
for(i=n-1;i>=0;i--)
for(j=i+1;j<n;j++)
b[i]-=a[i][j]*b[j];
return 1;
}
int main()
{
int i,j,n;
double a[maxn][maxn],b[maxn];
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%lf",&a[i][j]);
for(i=0;i<n;i++)
scanf("%lf",&b[i]);
gauss_cpivot(n,a,b);
for(i=0;i<n;i++)
printf("%.2lf\n",b[i]);
}
return 0;
}
EOJ gauss
最新推荐文章于 2015-10-11 20:11:23 发布