题目链接:http://acm.swust.edu.cn/problem/643/

Time limit(ms): 1000        Memory limit(kb): 65535
 
Description
一个n阶方阵A行列式记作detA,或者|A|.detA是一个数字,它的值按照下面的方式递归定义: 
如果n=1,detA=a11; 
如果n>1,detA= s1 *a11*detA1+s2 * a12 *detA2 +......+sn * a1n *det An 
一个上三角矩阵的行列式等于主对角线上元素的乘积。 
行列式具有如下的性质: 
 性质1  行列式的行与列互换,其值不变; 
性质2 用数k乘行列式的某一行(列),等于以数乘此行列式

 
Input
第一行输入矩阵的阶n 
 
Output
第二行输入矩阵本身。
n阶矩阵A的行列式detA.

 
Sample Input
 
2
1 2
3 4
Sample Output
-2
hint
用高斯消去法得上三角矩阵
 
 
解题思路:并不相信hint了(开个n次方就是x^(1/n),非要说牛顿切线方程,笑哭~~~),利用线性代数中行列式的性质化为上三角(下三角)行列式
     我这里化为上三角,然后行列式的值就是对角线乘积~~~~代码有详细注释,实在不会的看现代书吧~~~~
代码如下:
 #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]--行列式的计算(上三角行列式变换)的更多相关文章

  1. 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估

    进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...

  2. C++中计算矩阵的行列式

    使用eigen库: 求行列式: #include <iostream> #include <Eigen/Dense> using namespace std; using na ...

  3. SPOJ - Find The Determinant III 计算矩阵的行列式答案 + 辗转相除法思想

    SPOJ -Find The Determinant III 参考:https://blog.csdn.net/zhoufenqin/article/details/7779707 参考中还有几个关于 ...

  4. 方阵行列式并行化计算(OpenMP,MPI),并计算加速比

    00][100].在创建方阵时,方阵的阶数N(N<100)由外部输入.然后用两层"for循环"来给方阵 p左上角 N×N个位置赋值.具体实现如下: /* * 定义矩阵阶数N ...

  5. C#程序计算N阶行列式的值及N元一次方程组

    C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...

  6. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  7. C算法编程题(四)上三角

    前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个“上三角”,有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微复杂了点. 程序描述 ...

  8. 使用PHP计算上一个月的今天

    一日,遇到一个问题,求上一个月的今天. 最开始我们使用 strtotime(“-1 month”) 函数求值,发现有一个问题,月长度不一样的月份的计算结果有误. 比如:2011-03-31,得到的结果 ...

  9. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

随机推荐

  1. MFC 简单实现 DES 算法

    前言 徐旭东老师说过学者就应该对知识抱有敬畏之心,所以我的博客的标题总喜欢加上"简单"二字,就是为了提醒自己,自己所学知识只是皮毛,离真理还远矣. DES 算法 DES算法是密码体 ...

  2. DM368 arm板GDB远程调试

    参考: http://www.erchashu.com/wiki/eclipse-cdt-gdb-arm-app-cross-debug 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通 ...

  3. C# 读书笔记之访问关键字this和base

    this 关键字引用类的当前实例.静态成员方法中不能使用this关键字,this关键字只能在实例构造函数.实例方法或实例访问器中使用. base 关键字用于从派生类中访问基类的成员. 指定创建派生类实 ...

  4. LintCode-最长公共子串

    题目描述: 给出两个字符串,找到最长公共子串,并返回其长度. 注意事项 子串的字符应该连续的出现在原字符串中,这与子序列有所不同. 样例 给出A=“ABCD”,B=“CBCE”,返回 2 public ...

  5. tomcat 会话超时设置

    1.为单个WEB设置SESSION 在WEB.XML中添加 xml 代码 <session-config> <session-timeout>15</session-ti ...

  6. QQwry

    http://blog.runphp.net/archives/156 http://wenku.baidu.com/link?url=yvd3_EpMM66r6H4qkx3oqcaU2JZNAQv_ ...

  7. 中国天气网API

    中国天气网有三个 API 适用于不同场合的使用. http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下. { "weatherinf ...

  8. 使用python网络库下载

    下载1000次网页资源 1,普通循环方式下载1000次,非常慢 #!/usr/bin/python # -*- coding: utf-8 -*- import sys import os impor ...

  9. A计划(bfs)

    A计划 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  10. 简单JSONP跨域请求

    JSONP原理:利用<script>标签的src属性实现跨域的请求.可在URL中提供回调函数的名字.后台进过处理后将数据以回调函数参数的形式返回. demo:JSONP请求不同端口的数据 ...