记录编号 390615 评测结果 AAAAAAAAAAAAA
题目名称 [SDOI 2007] 线性方程组 最终得分 100
用户昵称 Gravatarxyz117 是否通过 通过
代码语言 C++ 运行时间 0.006 s
提交时间 2017-04-03 15:49:09 内存使用 0.34 MiB
显示代码纯文本
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int n,m;
double a[60][60],b[60],x[60];
void swap(double &xx,double &yy)
{
    double t;
    t=xx;
    xx=yy;
    yy=t;
}
int gauss()
{
    double t;
    int im,num=1;
    for(int k=1;k<n;k++,num++)
    {
        im=k;
        for(int i=k+1;i<=n;i++)
            if(fabs(a[i][k])>fabs(a[im][k]))
                im=i;
        if(im!=k)
        {
            for(int i=k;i<=n;i++)
                swap(a[num][i],a[im][i]);
            swap(b[num],b[im]);    
        }
        if(!a[num][k])
        {
            num--;
            continue;    
        }
        for(int i=num+1;i<=n;i++)
        {
            if(!a[num][k])
                continue;
            t=a[i][k]/a[num][k];
            for(int j=k;j<=n+1;j++)
                a[i][j]-=t*a[k][j]; 
            b[i]-=t*b[k];
        }   
    }
    for(int i=num;i<=n;i++)
        if(!a[i][n]&&b[i])
            return -1;
    for(int i=n;i>=1;i--)      
    {
        for(int j=n;j>=i+1;j--)
            b[i]-=a[i][j]*x[j];
        if(!a[i][i]&&b[i]!=0)
            return -1;
        if(!a[i][i]&&!b[i])
            return 0;
        x[i]=b[i]/a[i][i];    
    }  
    return 1; 
}
int main()
{
    freopen("gaess.in","r",stdin);
    freopen("gaess.out","w",stdout);
    int s;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            scanf("%lf",&a[i][j]);
        scanf("%lf",&b[i]);
    }    
    s=gauss(); 
    if(s!=1)
        printf("%d",s);
    else
        for(int i=1;i<=n;i++)
        {
            if(x[i]==0)
                printf("x%d=0\n",i);
            else
                printf("x%d=%.2lf\n",i,x[i]);
        }  
}