Linno @ 2022-09-26 13:39:46
wa 第三个点,有没有大佬帮忙看看,感激不尽。
#include<bits/stdc++.h>
#define int long long
//#define double long double
#define eps 1e-15
using namespace std;
const int maxn=105;
int n;
double a[maxn][maxn];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n; //注意这是n+1列的模板
for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) cin>>a[i][j]; //读入矩阵
for(int i=1;i<=n;i++){ //枚举列
int mx=i;
for(int j=i+1;j<=n;j++){ //选出该列最大主元(系数)
if(fabs(a[j][i])>fabs(a[mx][i])){
mx=j; //记录该行
}
}
for(int j=1;j<=n+1;j++) swap(a[i][j],a[mx][j]); //交换i和mx所在的两行
if(fabs(a[i][i])<eps) continue;
for(int j=1;j<=n;j++){ //对于i以外的每一行
if(j!=i){
double tmp=a[j][i]/a[i][i];
for(int k=i+1;k<=n+1;k++){ //对每一项做加减消元
a[j][k]-=a[i][k]*tmp;
}
}
}
}
bool no=0,mul=0;
for(int i=1;i<=n;++i){
if(fabs(a[i][i])<eps&&fabs(a[i][n+1])>eps) no=1;
if(fabs(a[i][i])<eps&&fabs(a[i][n+1])<eps) mul=1;
}
if(no){cout<<"-1\n";return 0;}
if(mul){cout<<"0\n";return 0;}
for(int i=1;i<=n;i++){
double res=(a[i][n+1]/a[i][i]);
if(fabs(res)<eps) res=fabs(res);
cout<<"x"<<i<<"="<<fixed<<setprecision(2)<<res<<"\n";
}
return 0;
}
by _EEA_ @ 2022-10-03 14:12:12
你试一下这组数据:
6
1 2 3 4 5 6 10
0 0 1 2 3 4 15
0 0 0 2 6 7 30
0 0 0 0 6 8 10
0 0 0 0 0 1 30
0 0 0 0 0 0 0
应该输出 0
,而你的输出了 -1