洛谷P3389 【模板】高斯消元法

题目背景

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

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const double eps=1e-7;
 9 const int mxn=125;
10 int read(){
11     int x=0,f=1;char ch=getchar();
12     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
13     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
14     return x*f;
15 }
16 int n;
17 double a[mxn][mxn];
18 double b[mxn];
19 int main(){
20     n=read();
21     int i,j;
22     for(i=1;i<=n;i++){
23         for(j=1;j<=n;j++)
24             a[i][j]=read();
25         a[i][n+1]=read();
26     }
27     for(i=1;i<=n;i++){
28         int p=i;
29         for(j=i+1;j<=n;j++)
30             if(fabs(a[j][i])>fabs(a[p][i]))p=j;
31         if(p!=i)for(j=1;j<=n+1;j++)swap(a[i][j],a[p][j]);
32         if(fabs(a[i][i])<eps){printf("No Solution
");return 0;}
33         for(j=i+1;j<=n;j++){
34             double x=a[j][i]/a[i][i];
35             for(int k=i;k<=n+1;k++){
36                 a[j][k]-=x*a[i][k];
37             }
38         }
39     }
40     for(i=n;i;i--){
41         for(j=i+1;j<=n;j++)
42             a[i][n+1]-=a[i][j]*a[j][n+1];
43         a[i][n+1]/=a[i][i];
44     }
45     for(i=1;i<=n;i++)printf("%.2f
",a[i][n+1]);
46     return 0;
47 }
原文地址:https://www.cnblogs.com/SilverNebula/p/6306344.html