Gauss消元60求助
查看原帖
Gauss消元60求助
364876
信息学carryHarry楼主2022/5/2 16:57
#include<bits/stdc++.h>

using namespace std;
const double N=1e-6;
int n;
struct node{
	double a[105];
	int p;
}e[105];
double x[105];
bool find(int a,int b)
{
	for(int i=a;i<=n;i++){
		if(abs(e[i].a[b])>N){
			swap(e[a],e[i]);
			return 1;
		}
	}
	return 0;
}
bool Guess()
{
	int i=1,p=0,b=0;
	for(;i<=n;i++){
		for(p++;p<=n+1&&!find(i,p);p++){
			b=1;
		}
		if(p>n){
			break;
		}
		e[i].p=p;
		for(int j=1;j<=n;j++){
			if(i!=j){
				for(int k=n+1;k>=p;k--){
					e[j].a[k]-=e[i].a[k]/e[i].a[p]*e[j].a[p];
				}
			}
		}
	}
	for(i--;i;i--){
		x[e[i].p]=e[i].a[n+1]/e[i].a[e[i].p];
	}
	if(p==n+1){
        cout<<0;
        exit(0);    
    }
	if(b){
		cout<<-1;
		exit(0);
	}
	return 1;
}                     	
int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++){
			cin>>e[i].a[j];
		}
	}
	if(Guess()){
		cout<<fixed<<setprecision(2);
		for(int i=1;i<=n;i++){
			cout<<"x"<<int(i)<<"="<<x[i]<<'\n';
		}
	}
	return 0;
}

2022/5/2 16:57
加载中...