Durancer @ 2021-01-16 08:51:32
不会判断无解和无数解QWQ
/*
2
0 2 3
0 0 0
显然是0
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<cmath>
using namespace std;
const int N=1e2+9;
double a[N][N];
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
scanf("%lf",&a[i][j]);
for(int i=1;i<=n;i++)
{
int maxn=i;
for(int j=i+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a[maxn][i]))
maxn=j;
for(int j=1;j<=n+1;j++)
swap(a[i][j],a[maxn][j]);
if(!a[i][i]) continue;
for(int j=1;j<=n;j++)
{
//cout<<"zsf ak ioi"<<endl;
if(j==i) continue;
double tmp=a[j][i]/a[i][i];
for(int k=i+1;k<=n+1;k++)
a[j][k]-=a[i][k]*tmp;
}
}
bool flag=false;
for(int i=1;i<=n;i++)
if(!a[i][i])
{
if(a[i][n+1])
{
cout<<-1<<endl;
return 0;
}
if(!a[i][n+1])
flag=true;
}
if(flag) cout<<0<<endl;
else for(int i=1;i<=n;i++)
printf("x%d=%.2lf\n",i,a[i][n+1]/a[i][i]);
return 0;
}
by BlankAo @ 2021-01-16 08:56:44
高斯-约旦消元很难区分无解与无数解。建议打传统的高斯消元。
by Durancer @ 2021-01-16 08:58:15
@BlankAo 好的,谢谢OVO