80pts求助
查看原帖
80pts求助
565378
Orange1015楼主2023/4/14 11:11

RT,高斯-约旦消元,求调

#include<bits/stdc++.h>
using namespace std;
#define MAXN 105
#define EPS 1e-6
double a[MAXN][MAXN],ans[MAXN];
int n,flag=1;
void gauss(){
	for(int i=1;i<=n;i++){
		int maxk=i;
		for(int j=i+1;j<=n;j++){
			if(fabs(a[j][i])>fabs(a[maxk][i])){
				maxk=j;
			}
		}
		for(int j=1;j<=n+1;j++){
			swap(a[i][j],a[maxk][j]);
		}
		for(int j=1;j<=n;j++){
			if(j!=i){
				double del=a[j][i]/a[i][i];
				for(int k=i+1;k<=n+1;k++){
					a[j][k]-=a[i][k]*del;
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		a[i][n+1]/=a[i][i];
	}
//	return;
}
int main(){
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++){
			cin >> a[i][j];
		}
	}
	gauss();
	for(int i=1;i<=n;i++){
		if(a[i][i]==0){
			if(a[i][n+1]==0.0) flag=0;
			else{
				flag=-1;
				cout << -1;
				return 0;
			}
		}
	}
	if(flag==0){
		cout << 0;
		return 0;
	}
	for(int i=1;i<=n;i++){
		printf("x%d=%.2lf\n",i,a[i][n+1]);
	}
	return 0;
} 
2023/4/14 11:11
加载中...