蒟蒻求调
查看原帖
蒟蒻求调
542879
_HCl_楼主2023/12/24 21:15

萌新刚学OI,高斯消元 60pts WA on #3#7#8#9#11,大佬路过帮忙看一下

#include<bits/stdc++.h>
using namespace std;
int n;
double mat[101][101],sol[101];
const double eps=1e-6;
int main(){
	cin>>n;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n+1;++j)
			scanf("%lf",&mat[i][j]);
	int r=1;
	for(int i=1;i<=n;++i){
		int xfc=r;
		for(int j=i+1;j<=n;++j)
			if(fabs(mat[j][i])>fabs(mat[xfc][i]))
				xfc=j;
		if(fabs(mat[xfc][i])<eps)continue;
		if(i!=xfc)swap(mat[i],mat[xfc]);
		double tmp=mat[i][i];
		for(int j=i;j<=n+1;++j)
			mat[i][j]/=tmp;
		for(int j=i+1;j<=n;++j){
			tmp=mat[j][i];
			for(int k=i;k<=n+1;++k)
				mat[j][k]-=mat[i][k]*tmp;
		}
		r++;
	}
	sol[n]=mat[n][n+1];
	for(int i=n-1;i;--i){
		sol[i]=mat[i][n+1];
		for(int j=i+1;j<=n;++j)
			sol[i]-=(mat[i][j]*sol[j]);
	}
	if(r<n){
		for(int i=r;i<=n;++i){
			if(fabs(sol[i])>eps){
				cout<<-1;
				return 0;
			}
		}
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;++i)
		printf("x%d=%.2lf\n",i,sol[i]);
}
2023/12/24 21:15
加载中...