题目背景
Gauss消元 题目描述
给定一个线性方程组,对其求解 输入输出格式 输入格式:
第一行,一个正整数n
第二至n+1行,每行n+1个整数,为a1,a2…an和b,代表一组方程。
输出格式:
共n行,每行一个数,第i行为xi (保留2位小数)
如果不存在唯一解,在第一行输出”No Solution”.
高斯消元。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
const double eps=1e-6;
int n;
double a[110][110];
int main()
{
int i,j,k,p;
double x;
scanf("%d",&n);
for (i=0;i<n;i++)
for (j=0;j<=n;j++)
scanf("%lf",&a[i][j]);
for (i=0;i<n;i++)
{
p=i;
for (j=i+1;j<=n;j++)
if (fabs(a[j][i])>fabs(a[p][i])) p=j;
if (p!=i)
for (j=0;j<=n;j++)
swap(a[i][j],a[p][j]);
if (fabs(a[i][i])<eps)
{
printf("No Solution\n");
return 0;
}
for (j=i+1;j<n;j++)
{
x=a[j][i]/a[i][i];
for (k=i;k<=n;k++)
a[j][k]-=x*a[i][k];
}
}
for (i=n-1;i>=0;i--)
{
for (j=i+1;j<n;j++)
a[i][n]-=a[j][n]*a[i][j];
a[i][n]/=a[i][i];
}
for (i=0;i<n;i++)
printf("%.2f\n",a[i][n]);
}