高斯消元解方程组
值域为double型
//by sdfzchy
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int inf=(1<<30);
int n,m;
inline int in()
{
char ch=getchar();
int f=1,tmp=0;
while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {tmp=(tmp<<1)+(tmp<<3)+(ch-'0');ch=getchar();}
return tmp*f;
}
const double eps=1e-12;
double a[110][110],ans[110];
inline int gi(double x)
{
if(x>=-eps&&x<=eps) return 0;
return (x>0)?1:-1;
}
bool gauss()
{
for(int i=1;i<=n;i++)
{
int num=i;
for(int j=i+1;j<=n;j++)
if(gi(a[j][i]-a[num][i])>0)
num=j;
if(num!=i)
for(int j=1;j<=n+1;j++)
swap(a[i][j],a[num][j]);
for(int j=i+1;j<=n;j++)
if(gi(a[j][i]))
{
double t=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++)
a[j][k]-=t*a[i][k];
}
}
for(int i=n;i>=1;i--)
{
if(gi(a[i][i])==0) return 0;
for(int j=i+1;j<=n;j++)
a[i][n+1]-=ans[j]*a[i][j];
ans[i]=a[i][n+1]/a[i][i];
}
return 1;
}
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
n=in();
for(int i=1;i<=n;i++)
for(int j=1;j<=n+1;j++)
scanf("%lf",&a[i][j]);
if(gauss())
{
for(int i=1;i<=n;i++) printf("%.2lf\n",ans[i]);
}
return 0;
}