RE#3#8,WA#9 求助

P2455 [SDOI2006] 线性方程组

Mr_ll @ 2022-07-20 20:18:41

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=50+5;
const double esp=1e-8;

int n;
int b[N],c;
double a[N][N];

void Gauss()
{
    int h=1;
    for(int i=1;i<=n;i++)
    {
        int maxx=h;
        for(int j=h+1;j<=n;j++)
        {
            if(a[maxx][i]<a[j][i])
            {
                maxx=j;
            }
        } 

        if(fabs(a[maxx][i])<esp) continue;

        for(int j=1;j<=n+1;j++)
        {
            swap(a[maxx][j],a[h][j]);
        }

        for(int j=1;j<=n+1;j++)
        {
            if(i==j) continue;

            double d=a[j][i]/a[h][i];

            for(int k=i+1;k<=n+1;k++)
            {
                a[j][k]-=d*a[h][k];
            }
        }
        h++;
    }

    h--;
    if(h<n)
    {
        for(int i=h+1;i<=n;i++)
        {
            if(fabs(a[i][n+1])<esp)
            {
                puts("-1");
                return;
            }
        }
        puts("0");
        return;
    }

    for(int i=1;i<=n;i++)
    {
        printf("x%d=%.2lf\n",i,a[i][n+1]/a[i][i]);
    }
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&b[1]);
        c=b[1];

        for(int j=2;j<=n+1;j++)
        {
            scanf("%d",&b[j]);
            c=__gcd(c,b[j]);
        }

        c=abs(c);

        for(int j=1;j<=n+1;j++)
        {
            a[i][j]=(double)(b[j]/c);
        }
    }

    Gauss();
    return 0;
}

|