关于第一个点输出NO

P3389 【模板】高斯消元法

@[圆梦之音](/user/538717) ?多解不就是无唯一解的一种情况吗? 我刚刚交了一发自己写的高斯-约旦消元法,它过了 /fad
by Plozia @ 2022-04-24 18:33:48


@[Plozia](/user/134000) 给您看一下我的代码?
by 圆梦之音 @ 2022-04-24 18:45:16


```cpp #include<bits/stdc++.h> #define re register using namespace std; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48) ; ch=getchar();} return x*f; } inline void print(int x){ if(x/10) print(x/10); putchar(x%10+'0'); } const int M = 1e4+10; int n; double a[110][M]; signed main(){ n=read(); for(re int i(1) ; i<=n ; ++i){ for(re int j(1) ; j<=n+1 ; ++j){ cin >> a[i][j]; } } for(re int i(1) ; i<=n ; ++i){ int maxn = i; for(re int j(i+1) ; j<=n ; ++j){ if(fabs(a[j][i]) > fabs(a[maxn][i])) maxn = j; } for(re int j(1) ; j<=n+1 ; ++j) swap(a[maxn][j],a[i][j]); if(!a[i][i]) {printf("No Solution");return 0;} for(re int j(1) ; j<=n ; ++j){ if(i == j) continue; double tmp = a[j][i]/a[i][i]; for(re int k(i+1) ; k<=n+1 ; ++k) a[j][k] -= a[i][k]*tmp; } } for(re int i(1) ; i<=n ; ++i) printf("%.2lf\n",a[i][n+1]/a[i][i]); return 0; } ```
by 圆梦之音 @ 2022-04-24 18:45:36


```cpp if(!a[i][i]) {printf("No Solution");return 0;} ``` 为什么 double 还用 `!a[i][i]` 写啊 直接写 `a[i][i] == 0` 不都比这强 而且因为 double 有精度误差难道不是写 `fabs(a[i][i]) < eps` 吗 我刚才按照上述改的交了一发过了
by Plozia @ 2022-04-24 18:56:10


@[圆梦之音](/user/538717) 如果语言哪里感觉过于激进指出即可 /kel
by Plozia @ 2022-04-24 18:56:38


@[Plozia](/user/134000) 哦哦,谢谢大佬![](//图.tk/c)
by 圆梦之音 @ 2022-04-24 19:05:16


|