高斯消元模板
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
int n;
double a[60][60],ans[60];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
cin>>a[i][j];
int len=1;
for(int i=1;i<=n;i++)
{
int t=len;
for(int j=len+1;j<=n;j++)
if(fabs(a[j][i])>fabs(a[t][i]))
t=j;
if(fabs(a[t][i])<eps)
{
continue;
}
if(t!=len) swap(a[len],a[t]);
for(int j=1;j<=n;j++)
{
if(j==len||!a[j][i])
continue;
double c=a[j][i]/a[len][i];
for(int k=i+1;k<=n+1;k++)
a[j][k]-=c*a[len][k];
}
len++;
}
if(len<=n)
{
for(int i=len;i<=n;i++)
if(fabs(a[i][n+1])>eps)
{
cout<<-1;
return 0;//无解
}
cout<<0;
return 0; //无穷多组解
}
int x=1;
for(int i=1;i<=n;i++)
{
if(a[i][n+1]==0)
printf("x%d=0\n",x);
else
printf("x%d=%.2lf\n",x,a[i][n+1]/a[i][i]);
x++;
}
}
/*6
1 2 3 4 5 6 10
0 0 1 2 3 4 15
0 0 0 2 6 7 30
0 0 0 0 6 8 10
0 0 0 0 0 1 30
0 0 0 0 0 0 0
*/
浙公网安备 33010602011771号