n元一次线性方程组模板

简介: n元一次线性方程组模板

题目描述


给定 n 个形如a1x1+a2x2+a3x3+⋯+anxn=b 的线性方程组,请你求出 x1,x2,⋯,xn


输入描述


第 1行为一个整数 n

接下来的 n 行每行包含一个 n+1 个整数 a1,a2,⋯,an,b,表示方程对应的系数和值。

1≤n≤100,−104≤∣ai∣,∣b∣≤104,保证对于任意的 i,j,ai,aj 都互质。

输出描述

输出 n 行,每行包含一个数,分别表示x1∼xn

若不存在唯一解,则仅需输出一行 −1。

答案保留 2 位小数。

样例输入

样例输出


1. #include<bits/stdc++.h>
2. using namespace std;
3. double a[105][105];   //存方程组的矩阵
4. double eps = 1e-7;
5. int main(){
6.     int n;
7.     scanf("%d",&n);
8. for(int i=1;i<=n;++i)
9. for(int j=1;j<=n+1;++j)
10.             scanf("%lf",&a[i][j]);    //读方程组,存入矩阵
11. for(int i=1;i<=n;++i){           //枚举列
12.         int max=i;
13. for(int j=i+1;j<=n;++j)      //选出该列最大系数
14. if(fabs(a[j][i])>fabs(a[max][i]))
15.                max=j;
16. for(int j=1;j<=n+1;++j)
17.             swap(a[i][j],a[max][j]); //把最大系数所在的行移到前面
18. if(fabs(a[i][i]) < eps){     //对角线上的主元系数等于0,说明没有唯一解
19.             puts("-1");
20. return 0;
21.         }
22. for(int j=n+1;j>=1;j--)         //把这一行的主元系数变为1
23.             a[i][j]= a[i][j]/a[i][i];  //除法产生精度问题
24. for(int j=1;j<=n;++j){         //消去主元所在列的其他行的主元
25. if(j!=i)    {
26.                 double temp=a[j][i]/a[i][i];
27. for(int k=1;k<=n+1;++k)
28.                     a[j][k] -= a[i][k]*temp;
29.             }
30.         }
31.     }
32. for(int i=1;i<=n;++i)    
33.         printf("%.2f\n",a[i][n+1]); //最后得到简化阶梯矩阵
34. return 0;
35. }
目录
相关文章
|
8月前
树状数组模板
树状数组模板
43 0
|
计算机视觉
挣值管理公式
挣值管理公式。
104 2
|
机器学习/深度学习 自然语言处理 算法
C++模板元模板(异类词典与policy模板)- - - 题目
C++模板元模板(异类词典与policy模板)- - - 题目
70 0
|
机器学习/深度学习 自然语言处理 安全
C++模板元模板(异类词典与policy模板)- - - 题目答案
C++模板元模板(异类词典与policy模板)- - - 题目答案
61 0
|
存储 自然语言处理 编译器
C++模板元模板(异类词典与policy模板)- - - 中篇
C++模板元模板(异类词典与policy模板)- - - 中篇
68 0
|
机器学习/深度学习 设计模式 C++
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
C++模板元模板实战书籍讲解第一章(奇特的递归模板式以及小结和题目)
88 0
P4057 [Code+#1]晨跑(数学分析,辗转相除法模板(欧几里得算法))
P4057 [Code+#1]晨跑(数学分析,辗转相除法模板(欧几里得算法))
73 0
背包问题(模板)
背包问题(模板)
55 0
|
人工智能 JavaScript C++
蓝桥杯统计子矩阵前缀和C++(附图文超详细讲解)(保姆级)
蓝桥杯统计子矩阵前缀和C++(附图文超详细讲解)(保姆级)