每次消元时枚举被消元的式子,从第一个式子开始,则消元过后只有主对角线和每行n+1位之后有值。
若主对角线上第i位为零,说明第i个元不存在唯一解。此时如果代入消元后对应的值为零,存在无数组解;反之无解。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
const double eps=1e-6;
double a[110][110];
bool Gauss(){
    for(int i=1;i<=n;i++){
        int pivot=i;
        for(int j=i+1;j<=n;j++)
        if(fabs(a[j][i])>fabs(a[pivot][i]))
            pivot=j;
        if(pivot^i)
            swap(a[i],a[pivot]);
        if(fabs(a[i][i])<eps)continue;
        for(int j=1;j<=n;j++){
            if(i!=j&&fabs(a[j][i])>eps){
                double t=a[i][i]/a[j][i];
                for(int k=1;k<=n+1;k++)
                    a[j][k]=a[j][k]*t-a[i][k];
            }
        }
    }
    for(int i=1,j=1;i<=n;i++){
        if(fabs(a[i][i])<eps)return false;
    }
    return true;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n+1;j++)
        scanf("%lf",&a[i][j]);
    if(Gauss()){
        for(int i=1;i<=n;i++){
            printf("%.2lf\n",fabs(a[i][n+1]/a[i][i])<eps?0:a[i][n+1]/a[i][i]);
        }
    }
    else puts("No Solution");
}

血まみれからの方がさ,勝つ時にはカッコイイだろう.