萌新妹子刚学高斯消元,20pts代码在线求调
查看原帖
萌新妹子刚学高斯消元,20pts代码在线求调
1164775
Jadonyzx楼主2024/3/25 21:27
#include<bits/stdc++.h>
#define double long double
using namespace std;
struct sign{
	double block[60][60];
};
sign ask;
int n;
double ans[60];
signed main(){
	cin>>n;
	bool flag=0;
	for(int i=1;i<=n;++i)
	for(int j=1;j<=n+1;++j)
	cin>>ask.block[i][j];
	for(int i=1;i<=n;++i){
		double max=abs(ask.block[1][i]);
		int id=1;
		for(int j=2;j<=n;++j)if(abs(ask.block[j][i])>max){max=abs(ask.block[j][i]);id=j;}
		if(max==0)flag=1;
		if(ask.block[id][i]<0)max*=-1.00000;
		max*=1.000000;
		for(int j=1;j<=n+1;++j)ask.block[id][j]=ask.block[id][j]*1.0000000/max;
		for(int j=1;j<=n;++j){
			if(j==id)continue;
			double up=ask.block[j][i];
			for(int k=1;k<=n+1;++k)ask.block[j][k]-=ask.block[id][k]*up;
		}
	}
	for(int i=1;i<=n;++i){
		bool fft=0;
		for(int j=1;j<=n;++j){
			if(ask.block[j][i]==1){
				ans[i]=ask.block[j][n+1];
				if(fft){
					cout<<-1;
					return 0;
				}
				fft=1;
			}
		}
	}
	if(flag){
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;++i)cout<<'x'<<i<<'='<<fixed<<setprecision(2)<<ans[i]<<'\n';
	return 0;
}
2024/3/25 21:27
加载中...