[Swust OJ 643]--行列式的计算(上三角行列式变换)
题目链接:http://acm.swust.edu.cn/problem/643/
如果n=1,detA=a11;
如果n>1,detA= s1 *a11*detA1+s2 * a12 *detA2 +......+sn * a1n *det An
一个上三角矩阵的行列式等于主对角线上元素的乘积。
行列式具有如下的性质:
性质1 行列式的行与列互换,其值不变;
性质2 用数k乘行列式的某一行(列),等于以数乘此行列式
第二行输入矩阵本身。
|
2
1 2
3 4
|
| -2 |
#include <stdio.h>
double mpt[][];
void init(int n)
{
int row, col;
for (row = ; row < n; row++)
for (col = ; col < n; col++)
scanf("%lf", &mpt[row][col]);
} void solve(int n){
double temp, ans = 1.0;
int cnt = , flag = ;
//cnt统计行变换 次数,每交换一次行,行列式符号变化1次,统计变化次数(详见线性代数课本)
int row, nextrow, col;
double tmp;
for (row = ; row < n - ; row++){
nextrow = row + ;
//开始处理第一列,如果行列式第一行第一个数为零,要交换行
if (mpt[row][row] == ){
while (mpt[nextrow][row] == ){
nextrow++; //如果行列式第二行第一个数为零,行增加继续寻找非零数值的行
//如果遍历完行列式行列式第一列元素都为零,退出while循环
if (nextrow == n){
flag = ;
break;
}
}
if (flag)continue;
//退出while循环后回到for(row=0;row<n-1;row++)行加1从mpt[row][row]==0知列也相应加1,开始处理第二列
cnt++;
for (col = ; col < n; col++){
//交换非零行到行列式顶部
tmp = mpt[row][col];
mpt[row][col] = mpt[nextrow][col];
mpt[nextrow][col] = tmp;
}
}
for (nextrow = row + ; nextrow < n; nextrow++){
temp = mpt[nextrow][row] / mpt[row][row];
for (col = ; col < n; col++)
mpt[nextrow][col] += -temp*mpt[row][col];//化行列式为上三角行列式形式
}
}
for (row = ; row < n; row++)ans *= mpt[row][row];
printf("%.f\n", cnt & ? -ans : ans);
}
int main(){
int n;
scanf("%d", &n);
init(n);
solve(n);
return ;
}
[Swust OJ 643]--行列式的计算(上三角行列式变换)的更多相关文章
- 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估
进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...
- C++中计算矩阵的行列式
使用eigen库: 求行列式: #include <iostream> #include <Eigen/Dense> using namespace std; using na ...
- SPOJ - Find The Determinant III 计算矩阵的行列式答案 + 辗转相除法思想
SPOJ -Find The Determinant III 参考:https://blog.csdn.net/zhoufenqin/article/details/7779707 参考中还有几个关于 ...
- 方阵行列式并行化计算(OpenMP,MPI),并计算加速比
00][100].在创建方阵时,方阵的阶数N(N<100)由外部输入.然后用两层"for循环"来给方阵 p左上角 N×N个位置赋值.具体实现如下: /* * 定义矩阵阶数N ...
- C#程序计算N阶行列式的值及N元一次方程组
C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...
- SWUST OJ NBA Finals(0649)
NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128 Descri ...
- C算法编程题(四)上三角
前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点. 程序描述 ...
- 使用PHP计算上一个月的今天
一日,遇到一个问题,求上一个月的今天. 最开始我们使用 strtotime(“-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误. 比如:2011-03-31,得到的结果 ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
随机推荐
- jQuery常用方法集锦
用方法:http://www.cnblogs.com/linzheng/archive/2010/11/14/1877092.html 数组汇总:http://www.cnblogs.com/Andy ...
- 这家伙,搞了好多C#excel的操作,学习了
http://www.cnblogs.com/peterzb/archive/2009/07/06/1517395.html
- 利用console控制台调试php代码
/** * 控制台输出 * @param $var * @param string $level */ public function console($var,$level = 'debug') { ...
- awk的用法(转)
awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...
- PHP新闻系统开发流程
PHP新闻系统开发流程一.系统总体设计 (一)系统功能描述和功能模块划分 (二)系统流程分析 (三)系统所用文件二.数据库设计 (一)创建数据库 (二)设计表结构三.新闻发布模块开发 (一)新闻首页 ...
- Hibernate Dialect must be explicitly set
在偶然一次运行hibernate测试类的时候,出现如下错误,Exception in thread "main" org.hibernate.HibernateException: ...
- 开源项目live555学习心得
推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册 疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订 ...
- IPTABLES 映射问题
今天要做一个新的映射:将内网的一个8090口映射到外网的8087口. 在 /ETC/RC.LOCAL中最后插入: iptables -t nat -A PREROUTING -d outIP -p t ...
- 「Foundation」字符串
一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1)NSArray:OC不可变数组 NSMutableA ...
- HTML5 按字母顺序排列的标签列表 new : HTML5 中的新标签。
标签 描述 <!--...--> 定义注释. <!DOCTYPE> 定义文档类型. <a> 定义超链接. <abbr> 定义缩写. <acron ...