rt,本人的思路是使用高斯消元,然后判断:
如果有 0xi=0 的方程,那么有无数解。
如果 0xi=0,那么无解。
可是……https://www.luogu.com.cn/record/124428711
完整代码:
#include<bits/stdc++.h>
using namespace std;
double a[128][128];
const double eps=1e-7;
int n,flag=0;
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 maxj=i;
for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[maxj][i]))maxj=j;
for(int j=1;j<=n+1;j++)swap(a[i][j],a[maxj][j]);
if(fabs(a[i][i])<eps)continue;
for(int j=n+1;j>=i;j--)a[i][j]/=a[i][i];
for(int j=1;j<=n;j++)
{
if(i==j)continue;
double base=a[j][i];
for(int k=i;k<=n+1;k++)a[j][k]-=base*a[i][k];
}
}
for(int j=1;j<=n;j++)
{
if(fabs(a[j][j])<eps)
{
flag=1;
if(fabs(a[j][n+1])>=eps)puts("-1");
return 0;
}
}
if(flag)puts("0");
else for(int j=1;j<=n;j++)printf("x%d=%.2lf\n",j,a[j][n+1]);
return 0;
}
/bx