/约旦消元法大致思路如下:
1.选择一个尚未被选过的未知数作为主元,选择一个包含这个主元的方程。
2.将这个方程主元的系数化为1。
3.通过加减消元,消掉其它方程中的这个未知数。
4.重复以上步骤
/

include<bits/stdc++.h>

define rep(i,a,b) for(int i=a;i<=b;++i)

define dwn(i,a,b) for(int i=a;i>=b;--i)

define X (c^48)

define C c=getchar()

define ee(i,x) for(int i=head[x];i;i=e[i].next)

template void inline rd(T&x){char c;int f=1;while(!isdigit(C))if(c=='-')f=-1;x=X;while(isdigit(C))x=x10+X;x=f;}

define debug printf("Now is %d\n",LINE);

using namespace std;

define N 105

double a[N][N];
int n;
int main()
{
freopen("read.txt","r",stdin);
rd(n);
rep(i,1,n)
rep(j,1,n+1)
rd(a[i][j]);

rep(i,1,n)//枚举列
{
    int max=i;
    rep(j,i+1,n)//选出该列最大系数
        if(fabs(a[j][i])>fabs(a[max][i]))//fabs是取浮点数的绝对值的函数
            max=j;

    int max=i;
    rep(j,i+1,n)
        if(fabs(a[j][i])>fabs(a[max][i]))
            max=j;
    rep(k,1,n+1)
        swap(a[max][k],a[i][k]);

    if(!a[i][i])//最大值等于0则说明该列都为0,肯定无解||有无数种解
    {
        puts("No Solution");
        return 0;
    }

    rep(j,1,n)//每一项都减去一个数(小学加减消元)
    {
        if(j!=i)
        {
            double temp=a[j][i]/a[i][i];
            rep(k,i+1,n+1)
                a[j][k]-=a[i][k]*temp;
        }
    }
}
//上述操作结束后,矩阵会变成这样
/*
k1*a=e1
k2*b=e2
k3*c=e3
k4*d=e4
e.g.
2     0    0          2
0     3/2  0         -2
0     0    2/3        2
*/
//所以输出的结果要记得除以该项系数,消去常数
rep(i,1,n)
    printf("%.2lf\n",a[i][n+1]/a[i][i]);
return 0;

}

01-20 08:28