Orange1015 @ 2023-04-07 11:42:09
高斯约旦消元,80pts
#include<bits/stdc++.h>
using namespace std;
#define MAXN 105
double a[MAXN][MAXN],ans[MAXN];
int n,flag;
void prt(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n+1;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return;
}
void gauss(){
int r;
for(int i=1;i<=n;i++){
r=i;
for(int j=i+1;j<=n;j++){
if(fabs(a[j][i])>fabs(a[r][i])){
r=j;
}
}
if(i!=r){
swap(a[i],a[r]);
}
if(a[i][i]==0){
bool f=0;
for(int j=i;j<=n;j++){
if(a[i][j]!=0){
f=1;
}
}
if(!f){
if(a[i][n+1]!=0) flag=-1;
else flag=0;
return;
}
}
for(int j=1;j<=n;j++){
if(j!=i){
double tmp=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++){
a[j][k]=(a[j][k]-a[i][k]*tmp);
}
}
}
//prt();
}
for(int i=1;i<=n;i++){
if(a[i][i]==0){
if(a[i][n+1]==0) flag=0;
else flag=-1;
return;
}
}
flag=1;
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();
if(flag == 1){
for(int i=1;i<=n;i++){
ans[i]=a[i][n+1]/a[i][i];
if(ans[i]==-0.0) ans[i]=0.00;
printf("x%d=%.2lf\n",i,ans[i]);
}
}
else{
cout << flag;
}
return 0;
}