高斯消元模板
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
double map[120][120] ,ans[120];
//double eps=1e-7;
double eps=1e-7;
int main()
{
int n ;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n + 1; j++)
{
scanf("%lf",&map[i][j]);
}
}
for(int i = 1; i <= n; i++)
{
int r = i ;
for(int j = i+1; j <= n; j++)
{
if(fabs(map[r][i])<fabs(map[j][i]))//取一行的最大值可以减小误差
{
r = j ;
}
}
if(fabs(map[r][i])<eps)//都为0就答案不唯一
{
printf("No Solution\n");
return 0 ;
}
if(i!=r)
swap(map[i],map[r]);
double div = map[i][i] ;
for(int j = i; j <= n + 1; j++)
{
map[i][j]/=div;
}
for(int j = i+1; j <= n; j++)
{
div = map[j][i] ;
for(int k = i; k <= n + 1; k++)
{
map[j][k]-=div*map[i][k];
}
}
}
ans[n] = map[n][n+1];
for(int i = n-1; i >= 1; i--)
{
ans[i] = map[i][n+1];
for(int j = i + 1; j <= n; j++)
{
ans[i]-=(ans[j]*map[i][j]);
}
}
for(int i = 1; i <= n; i++)
{
printf("%.2lf\n",ans[i]);
}
}