P3389 【模板】高斯消元法
时间:2022-05-08
本文章向大家介绍P3389 【模板】高斯消元法,主要内容包括题目背景、题目描述、输入输出格式、输入输出样例、说明、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目背景
Gauss消元
题目描述
给定一个线性方程组,对其求解
输入输出格式
输入格式:
第一行,一个正整数 nn
第二至 n+1n+1行,每行 n+1n+1 个整数,为a_1, a_2 cdots a_na1,a2⋯an 和 bb,代表一组方程。
输出格式:
共n行,每行一个数,第 ii行为 x_ixi (保留2位小数)
如果不存在唯一解,在第一行输出"No Solution".
输入输出样例
输入样例#1:
3
1 3 4 5
1 4 7 3
9 3 2 2
输出样例#1:
-0.97
5.18
-2.39
说明
1 leq n leq 100, left | a_i right| leq {10}^4 , left |b right| leq {10}^41≤n≤100,∣ai∣≤104,∣b∣≤104
本来想深入的研究一下矩阵来着,,
结果不知道怎么着的研究到高斯消元上了,。。。。
高斯消元法真是一个神(bao)奇(li)的的东西、
本来想仔细整理整理来着,结果发现我不会在博客园里写矩阵,
1 #include<cstdio>
2 #include<cstring>
3 #include<cmath>
4 #include<algorithm>
5 //#define Matrix double
6 using namespace std;
7 const int MAXN=101;
8 typedef double Matrix[MAXN][MAXN];
9 inline void read(int &n)
10 {char c=getchar();bool flag=0;
11 while(c<'0'||c>'9') c=='-'?flag=1,c=getchar():c=getchar();
12 while(c>='0'&&c<='9') n=n*10+c-48,c=getchar();flag==1?n=-n:n=n;}
13 int n;
14 Matrix a;
15 void debug()
16 {
17 /*printf("********************************n");
18 for(int i=1;i<=n;i++)
19 {
20 for(int j=1;j<=n+1;j++) printf("%.2lf ",a[i][j]);
21 printf("n");
22 }*/
23 }
24 void gauss_elimination(int n)
25 {
26 int r;// 将要选择的最大值
27 for(int i=1;i<=n;i++)
28 {
29 r=i;
30 for(int j=i+1;j<=n;j++)// 枚举后面的行
31 if(fabs(a[j][i])>fabs(a[r][i])) r=j;
32 debug();
33 if(r!=i) swap(a[r],a[i]);
34 debug();
35 if(!a[i][i])
36 {
37 printf("No Solutionn");
38 return;
39 }
40 for(int k=i+1;k<=n;k++)// 与后面的进行消元
41 {
42 double f=a[k][i]/a[i][i];//模拟人工消元
43 for(int j=i;j<=n+1;j++) a[k][j]-=f*a[i][j];
44 }
45 debug();
46 }
47 debug();
48 for(int i=n;i>=1;i--)
49 {
50 debug();
51 for(int j=i+1;j<=n;j++)
52 a[i][n+1]-=a[j][n+1]*a[i][j];
53 a[i][n+1]/=a[i][i];
54 }
55 for(int i=1;i<=n;i++)
56 printf("%.2lfn",a[i][n+1]);
57 }
58 int main()
59 {
60 read(n);
61 for(int i=1;i<=n;i++)
62 for(int j=1;j<=n+1;j++)
63 scanf("%lf",&a[i][j]);
64 gauss_elimination(n);
65 return 0;
66 }
- SpringBoot整合Mybatis之进门篇
- Tomcat和Java Virtual Machine的性能调优总结
- 一次浴火重生的MySQL优化(EXPLAIN命令详解)
- 简单聊聊不可或缺的Nginx反向代理服务器--实现负载均衡【上篇】
- Java设计模式之适配器设计模式(项目升级案例)
- Java设计模式之模板方法设计模式(银行计息案例)
- 多线程之策略模式
- 文件上传的动作不能太俗,必须页面无刷新上传
- 这次真的忽略了一些ActiveMQ内心的娇艳
- 多线程编程:阻塞、并发队列的使用总结
- 多线程编程:多线程并发制单的开发记录【一】
- 如何使用线程锁来提高多线程并发效率
- 如何在分布式环境中同步solr索引库和缓存信息
- 如何在分布式环境中同步solr索引库和缓存信息
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现底部图片选择Dialog
- AndroidImageSlider实现炫酷轮播广告效果
- Android获取手机本机号码的实现方法
- Android中RecyclerView的item宽高问题详解
- Andoroid实现底部图片选择Dialog效果
- Android中ExpandableListView使用示例详解
- Android 高德地图之poi搜索功能的实现代码
- Android实现底部弹出按钮菜单升级版
- Android实现单页面浮层可拖动view的示例代码
- 漫画:最长公共子序列
- RecyclerView的简单使用
- Android Parcelable接口使用方法详解
- 假期结束了,撸一篇技术和大伙分享下吧!
- Android AIDL实现跨进程通信的示例代码
- Android中SharedPreferences简单使用实例