高斯消元第二个点挂了?

P2455 [SDOI2006] 线性方程组

滑蒻稽 @ 2021-04-08 18:17:44

提示

Wrong Answer. wrong answer On line 1 column 5, read n, expected 5.

但我从头到尾都没输出过 n 这个字符啊

代码:

#include <bits/stdc++.h> 
#include <algorithm>

using namespace std;
typedef long long ll;
const int N=55;
int n;

struct mat {
    int l,c;
    double p[N][N];
    double* operator [] (int i) {return p[i];}
}a;

void REF() {
    for(int i=1;i<=n;i++) {
        int flag=i;
        for(int j=i;j<=n;j++) {
            if(fabs(a[j][i])>fabs(a[flag][i])) flag=j;
        }
        for(int j=1;j<=n+1;j++) swap(a[flag][j],a[i][j]);
        if(a[i][i]==0) continue;
        for(int j=i+1;j<=n;j++) {
            double t=a[j][i]/a[i][i];
            for(int k=i;k<=n+1;k++) {
                a[j][k]-=t*a[i][k];
            }
        }
    }
}

void RREF() {
    for(int i=n;i>=1;i--) {
        if(a[i][i]==0) continue;
        for(int j=n+1;j>=i;j--) a[i][j]/=a[i][i];
        for(int j=i-1;j>=1;j--) {
            double t=a[j][i];
            for(int k=n+1;k>=1;k--) {
                a[j][k]-=t*a[i][k];
            }
        }
    }
    bool no=false,many=false;
    for(int i=1;i<=n;i++) {
        int t=0;
        for(int j=1;j<=n;j++) if(a[i][j]!=0) ++t;
        if(t==0 && a[i][n+1]!=0) no=true;
        if(t==0 && a[i][n+1]==0) many=true;
    }
    if(no) printf("-1");
    else if(many) printf("0");
    else for(int i=1;i<=n;i++) {if(!a[i][n+1]) a[i][n+1]=0.0;printf("x%d=%.2lf\n",i,a[i][n+1]);}
}

int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=n+1;j++) {
            cin>>a[i][j];
        }
    }
    REF();
    RREF();

    return 0;
}

by 滑蒻稽 @ 2021-04-08 18:29:43

应该是输出了 nan


by 滑蒻稽 @ 2021-04-08 18:29:53

@滑蒻稽 谢谢


by 滑蒻稽 @ 2021-04-08 18:31:04

@滑蒻稽 但是为什么会输出nan啊?我也没有除0啊?


by 滑蒻稽 @ 2021-04-08 18:33:00

抱歉. 如果是column 5 的话应该是输出了 inf ,比如 3/0 就会得到inf. 但是你肯定过程中除以了 0


by 滑蒻稽 @ 2021-04-08 18:33:20

@滑蒻稽 好的,我再看看


by ethan_zhou @ 2021-04-08 18:36:26

刚要答发现被题主自己抢答了(自问自答可还行


by 滑蒻稽 @ 2021-04-08 18:37:33

@ethan_zhou 但是我还是没找到哪里除了 0 ....


by ethan_zhou @ 2021-04-08 18:43:24

@滑蒻稽 我觉得在判 0 比如说你代码中的 a[i][n+1]==0 最好加个eps(但是我加了还是 wa),我再看看


by ethan_zhou @ 2021-04-08 18:51:56

@滑蒻稽 我也实在搞不明白


by 滑蒻稽 @ 2021-04-08 18:53:33

@ethan_zhou 我改成高斯-约旦消元法试试


| 下一页