@[圆梦之音](/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