Please help! 80 pts!
查看原帖
Please help! 80 pts!
754095
starNameHXH楼主2024/7/26 20:40
#include<bits/stdc++.h>
using namespace std;
const int N=110;
double eps=1e-6;
double a[N][N];
int n,i,j,k,key=1;
inline bool iszero(double x){
	return abs(x)<eps;
}
int main(){
	cin>>n;
	for(i=1;i<=n;i++)
		for(j=1;j<=n+1;j++)
			cin>>a[i][j];
	for(j=1;j<=n;j++){
		bool flag=0;
		if(iszero(a[j][j])){
			flag=1;
			for(i=j+1;i<=n;i++){
				if(!iszero(a[i][j])){
					flag=0;
					for(k=1;k<=n+1;k++){
						swap(a[j][k],a[i][k]);
					}
					break;
				}
			}
		}
		if(flag){
			if(!iszero(a[i][n+1])){
				key=-1;
			}else if(key!=-1){
				key=0;
			}
			continue;
		}
		for(i=j+1;i<=n;i++){
			double b=a[i][j]/a[j][j];
			for(k=1;k<=n+1;k++){
				a[i][k]-=a[j][k]*b;
			}
		}
	}
	for(j=n;j>=2;j--){
		if(iszero(a[j][j])){
			if(!iszero(a[i][n+1])){
				key=-1;
			}else if(key!=-1){
				key=0;
			}
			continue;
		}
		for(i=j-1;i>=1;i--){
			double b=a[j][j]/a[i][j];
			for(k=n+1;k>=1;k--){
				a[i][k]-=a[j][k]/b;
			}
		}
	}
	if(key!=1){
		cout<<key;
		return 0;
	}
	for(i=1;i<=n;i++)
		printf("x%d=%.2lf\n",i,a[i][n+1]/a[i][i]);
	return 0;
}
2024/7/26 20:40
加载中...