pt90求助!!
查看原帖
pt90求助!!
60932
Linno楼主2022/9/26 13:39

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;
}
2022/9/26 13:39
加载中...