题目背景

Gauss消元

题目描述

给定一个线性方程组,对其求解

输入输出格式

输入格式:
第一行,一个正整数n

第二至n+1行,每行n+1个整数,为a1,a2…an和b,代表一组方程。

输出格式:
共n行,每行一个数,第i行为xi (保留2位小数)

如果不存在唯一解,在第一行输出”No Solution”.

输入输出样例

输入样例#1:
1
1 1
输出样例#1:
1.00
说明

1<=n<=100, |ai|<=10000, |b|<=10000


【分析】
不想分析。参考腿巨。自行理解蟹蟹。


【代码】

//Gauss Eli Mod
//Code By SDFZ-czy
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
double a[210][210],now;
int n;
const double eps=1e-8;
inline bool gauss()
{
int i,j,k,x;
fo(i,1,n)
{
k=i;
fo(x,i+1,n)
if(fabs(a[x][i])>fabs(a[k][i]))
k=x;
if((fabs(now=a[k][i]))<eps) return 0;
fo(j,1,n+1)
swap(a[i][j],a[k][j]);
fo(j,1,n+1)
a[i][j]/=now;
fo(k,1,n)
if(k!=i)
{
now=a[k][i];
fo(j,1,n+1)
a[k][j]-=a[i][j]*now;
}
}
return 1;
}
int main()
{
int i,j;
scanf("%d",&n);
fo(i,1,n)
fo(j,1,n+1)
scanf("%lf",&a[i][j]);
if(!gauss()) printf("No Solution\n");
else fo(i,1,n)
printf("%.2lf\n",a[i][n+1]);
return 0;
}