[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 ...
随机推荐
- Spring Annotation vs XML - 示例
来源: http://hanqunfeng.iteye.com/blog/2113820 作者hanqunfeng的示例文件: (可下载) web-mvc.zip
- Yii2.0中文开发向导——删除数据
直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ...
- 用PyRestful快速构建Tornado下REST APIs 的支持
一.安装PyRestful库 $ pip install pyrestful 二.使用案例 (一)books_service.py # -*- coding: utf-8 -*- import tor ...
- 什么是core dump?(转)
什么是Core Dump? 今天调试一个程序, 用到了core dump, 于是写出来, 记于此.什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开 发和使用Uni ...
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- Jsp、Servlet
1 forward.redirect forward 转发是服务器行为,浏览器根本不知道服务器发送的内容是从哪儿来,所以它的地址栏中还是原来的地址. redirect 重定向是客户端行为.redire ...
- JAVA GUI学习 - JInternalFrame浮动窗口:可拖拽窗口(依赖于父窗口)
public class JInternalFrameKnow extends JInternalFrame { public JInternalFrameKnow() { this.setBound ...
- Android学习资料PDF免费大放送,每日更新!有需要的亲看这里
说明:以前有资料分享的时候,都叫大家留下自己的QQ邮箱,这样被很多的程序猿们认为我是专门来钓你们的QQ邮箱的.为此给大家带来的顾虑,深表抱歉.从现在开始,以后的分享资料我都会放在自己的百度网盘中,提供 ...
- linux 中多线程使用
/* * 对于线程之间的操作: * 一个进程中会有多个线程,各个线程之间的或向切换会付出很小的代价相比于进程之间的切换 * 为什么要引入多线程: * 1.与进程相比,他是一种非常节俭的多任务的操作方式 ...
- Andriod之Activity
eclipse还原默认的面板设计:Window > Reset Perspective> OK1\ 1.多个Activity之间的关系: 2.Intent的基本作用: 3.在一个Activ ...