Acwing 883高斯消元法的运用
Acwing 883高斯消元法的运用
解线性方程组
Acwing 883
输入一个包含 n 个方程 n 个未知数的线性方程组。
方程组中的系数为实数。
求解这个方程组。
下图为一个包含 m 个方程 n 个未知数的线性方程组示例:

输入格式
第一行包含整数 n。
接下来 n 行,每行包含 n+1 个实数,表示一个方程的 n 个系数以及等号右侧的常数。
输出格式
如果给定线性方程组存在唯一解,则输出共 n 行,其中第 i 行输出第 i 个未知数的解,结果保留两位小数。
如果给定线性方程组存在无数解,则输出<Infinite group solutions>。
如果给定线性方程组无解,则输出 <No solution>。
数据范围
1≤n≤100,
所有输入系数以及常数均保留两位小数,绝对值均不超过 100。
输入样例:
3
1.00 2.00 -1.00 -6.00
2.00 1.00 -3.00 -9.00
-1.00 -1.00 2.00 7.00
输出样例:
1.00
-2.00
3.00
Train of thought
根据线性代数高斯消元求解线性方程组的方法:
从每一列的角度考虑,先找出每一列中绝对值最大的数
然后把这个数所对应行与对应要处理的行交换,我们要做的就是尽可能地将它化为阶梯型矩阵
如:按照样例来分析
所对应的增广矩阵变化为

现在我们的任务是处理第一行,将第一行第一列归一以后把下面每行第一个数消掉
所以原矩阵变为

可以看到第一列的任务已经完成了,下面开始处理第二行,后面的思路以此类推
最后应化为上三角矩阵
Note:
- 由于最后处理完是上三角矩阵,如果是有解的,我们还要从最后一行来进行向上的消元,这样才能得到每一个元素的解
- 由于计算机浮点数的不精确度,我们需要定义一个浮点数常量来判断当前的数是否为0,在本题中可以设为1e-6
- 如果判断出当前的那一列最大的数为0;应该直接循环下一列,而待处理的行不发生改变;
- 判断无解的情况即0 = bi,而bi通过计算不为0;
综上所述,代码如下:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double Matrix[105][105];
int n;
double Exp = 1e-6;
int guass()
{
int c,r;
for(c = 1,r = 1; c <= n; ++c)
{
int p = r;
for(int t = r; t <= n; ++t)
if(fabs(Matrix[t][c]) > fabs(Matrix[p][c]))
p = t;//找到绝对值最大的数所对应的行
if(fabs(Matrix[p][c]) < Exp) continue;//这里对应第三点注意
for(int i = c; i <= n + 1; ++i) swap(Matrix[p][i], Matrix[r][i]);
for(int i = n + 1; i >= c; --i) Matrix[r][i] /= Matrix[r][c];//第一个系数归一
for(int i = r + 1; i <= n; ++i)
for(int j = n + 1; j >= c; --j)
if(fabs(Matrix[i][c] )> Exp)
Matrix[i][j] -= Matrix[i][c] * Matrix[r][j];//消元
r++;
}
if(r <= n)
{
for(int i = r; i <= n; ++i)
if(fabs(Matrix[i][n + 1]) > Exp)
return 1;//对应第4点注意
return 2;
}
for (int i = n ; i >= 1; i -- )
for (int j = i - 1; j >= 1; j -- )
Matrix[j][n + 1] -= Matrix[j][i] * Matrix[i][n + 1];
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n + 1; ++j)
cin >> Matrix[i][j];
int t = guass();
cout << setprecision(2) <<fixed;
if(t == 0)
for(int i = 1; i <= n; ++i)
cout << Matrix[i][n + 1] << endl;
else if(t == 1)
cout << "No solution" << endl;
else
cout << "Infinite group solutions" << endl;
return 0;
}
感谢大家的阅读,第一次写博客,有些地方做的不好的恳请大家指出,一定会多加改进( ̄▽ ̄)
Acwing 883高斯消元法的运用的更多相关文章
- POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37427 Accepted: 16288 Descr ...
- POJ 1222 (开关问题+高斯消元法)
题目链接: http://poj.org/problem?id=1222 题目大意:一堆开关,或开或关.每个开关按下后,周围4个方向开关反转.问使最后所有开关都关闭的,开关按法.0表示不按,1表示按. ...
- hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法
传送门:hdu 5833 Zhu and 772002 题意:给n个数,每个数的素数因子不大于2000,让你从其中选则大于等于1个数相乘之后的结果为完全平方数 思路: 小于等于2000的素数一共也只有 ...
- ZOJ3560 Re:the Princess(高斯消元法)
题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...
- POJ1222 高斯消元法解抑或方程
第一次学怎么用高斯消元法解抑或方程组,思想其实很简单,方法可以看下面的链接:http://blog.csdn.net/zhuichao001/article/details/5440843 有了这种思 ...
- 高斯消元法~get√
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- 高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. ...
- 集成电路883和883b有什么区别
根据用途,元器件的质量等级可分为:用于元器件生产控制.选择和采购的质量等级和用于电子设备可靠性预计的质量等级两类,两者有所区别,又相互联系. 用于元器件生产控制.选择和采购的质量等级 元器件的质量等级 ...
- 腾讯机试题 AcWing 603 打怪兽
题目链接:https://www.acwing.com/problem/content/605/ 题目大意: 略 分析: 用dp[i][j]表示用j元钱能在前i只怪兽上所能贿赂到的最大武力值. 有一种 ...
随机推荐
- tcpdump软件使用
tcpdump是一个抓包工具, -w 选项是把抓到的包写到二进制文件中,一般扩展名是.cap或.dmp,但tcpdump程序创建文件时并不添加扩展名,可自己指定. -i 是指定要抓包的interfac ...
- 深入GraphQL 的使用语法
深入GraphQL 的使用语法 对于GraphQL 的使用语法在上一节中已经大概介绍了基本的使用方式了,这一篇将会对上一篇入门做拓展,努力将所有的使用语法都覆盖到. 1. 终端语法 首先是介绍在前端查 ...
- 7.27考试总结(NOIP模拟25)[random·string·queue]
死亡的尽头,没有神 T1 random 解题思路 这波是找规律完胜了.. lby dalao根据样例找出了正确的式子:\(\dfrac{n^2-1}{9}\) 然而,我这个菜鸡却推出了这样一个错误的式 ...
- 一些Shell脚本记录
查看换行符 使用vim打开文件,输入:set ff?.根据返回结果可以文件类型 字符串 opcenter.sjb.bz [root@opcenter backup]# echo ${HOSTNAME% ...
- Java 反射(一)反射简介、原理和应用场景
目录 一.动态语言和动态语言的比较 动态语言 静态语言 二.反射 简介 反射的常见使用 1. 代码编辑器 2. Spring等框架的IoC容器 3. 和注解的配合使用 原理 反射优缺点 调试查看 Cl ...
- rot位移密码详解(rot5、rot13、rot18、rot47)
最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 rot密码 rot密码其实可以看作是凯撒密码的一种变式 本质都是移位运算 rot密码按种类大致分为以下几类 rot ...
- IIS短文件名漏洞原理与挖掘思路
首先来几个网址先了解一下 https://www.jb51.net/article/166405.htm https://www.freebuf.com/articles/web/172561.htm ...
- 《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)
1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath.xpath 的定位方法, 非常强大. 使用这种方法几乎可以定位到页面上的任意元素. ...
- openssl常用命令行汇总
openssl常用命令行汇总 随机数 openssl rand -out rand.dat -base64 32 摘要 直接做摘要 openssl dgst -sha1 -out dgst.dat p ...
- 尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性
本文首发于<尝新体验ASP.NET Core 6预览版本中发布的最小Web API(minimal APIS)新特性> 概述 .NET开发者们大家好,我是Rector. 几天前(美国时间2 ...