MnZn刚学高斯消元1ms 求助

P2455 [SDOI2006] 线性方程组

上面改了一点结果变成60了?
by wyf_sinon @ 2024-01-04 19:33:09


pts80代码 ```cpp #include<bits/stdc++.h> using namespace std; #define DB double const int N=105; DB a[N][N],b[N]; DB eps=1e-7; int n; void ct() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<a[i][j]<<" "; cout<<b[i]; puts(""); } return ; } signed main() { 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]); } for(int i=1;i<=n;i++) // 解出xi并消去剩余xi的系数 { bool f = false; for(int j=i;j<=n;j++) { if(fabs(a[j][i])>eps) //找到一个xi系数不为0的方程 { for(int k=1;k<=n;k++) swap(a[i][k],a[j][k]); swap(b[i],b[j]); f=true; } } if(!f) { printf("0"); exit(0); } for(int j=1;j<=n;j++) { if(i==j) continue; DB rate=a[j][i]/a[i][i]; for(int k=i;k<=n;k++) a[j][k]-=a[i][k]*rate; b[j]-=b[i]*rate; } } for(int i=1;i<=n;i++) { if(fabs(a[i][i])<eps&&fabs(b[i])>eps) { puts("-1"); exit(0); } for(int j=1;j<=n;j++) { if(i==j) continue; if(fabs(a[i][j])>eps) { printf("0"); exit(0); } } } for(int i=1;i<=n;i++) printf("x%d=%.2f\n", i , b[i]/a[i][i] ); return 0; } ```
by wyf_sinon @ 2024-01-04 19:35:26


@[wyf_sinon](/user/540177) 因为 double 把 0 算作负数,应该判断是否为 -0,强行转化成 0。
by Y_QWQ_Y @ 2024-02-10 21:00:33


原来是这样吗(吃惊
by wyf_sinon @ 2024-02-19 08:42:20


|