U66785 行列式求值

二更:把更多的行列式有关内容加了进来(%%%%%Jelly Goat奆佬)

题目描述

给你一个N(n≤10n\leq 10n10)阶行列式,请计算出它的值

输入输出格式

输入格式:

第一行有一个整数n
在以下n行中,每行有n个整数,表示该行列式

输出格式:

这个行列式的值

输入输出样例

输入样例#1: 
8
2 10 4 4 3 6 10 6
1 10 9 3 2 1 6 7
3 9 8 7 1 1 8 7
2 10 8 6 9 9 3 4
1 7 1 8 2 6 2 3
9 2 4 8 10 6 10 3
3 6 7 9 8 2 8 1
2 9 2 1 10 7 4 5
输出样例#1:
-135742
输入样例#2: 
4
1 2 3 4
1 3 4 1
1 4 1 2
1 1 2 3
输出样例#2: 
16
首先这是一道非常简单的板子题,他耗费了我两天将近两个多小时的时间,那么我们就来细细分析一下这道题
思路大致如下:

按照高斯消元法,把行列式消成下三角,然后按照公式直接求对角线乘积即为答案
有这么几个坑
1.忘记用double类型,因为行列式做除法的时候肯定是要出小数的,不用double肯定gg
2.没有注意当a[i][i]==0的时候,我们没法按照公式把它下面消为零,所以需要一个换行操作
代码如下
while (a[i][i] == 0 && sum<=n) //对是否a[i][i]是0的特判
        {CH2(i, sum + 1); //交换x列和y列ans *= -1;sum++;}
3.输出的时候忘记控制精度,其实原因是这样的,在小数点后位数多于18个之后,c++会自动转成科学计数法。。。。。。
但是洛谷不认啊喂!!!!!!!,所以输出的时候手动控制一下就好
  printf("%0.0lf", ans);
4.各种奇奇怪怪的诸如循环控制写错了或者是while条件判错了的诡异失误,导致我挂了整整五次
不过这种经历也的确是能让我深刻的记住这道题了吧。
现在贴一下AC代码
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
double n, a[20][20], ans = 1;
int sum;
inline void CH1(int x, int y, double k) //第y行减k*x
{for (int i = 1; i <= n; ++i)a[y][i] -= (double)(k * a[x][i]);
}
inline void CH2(int x, int y) //交换x列和y列
{for (int i = 1; i <= n; ++i)swap(a[i][x], a[i][y]);
}
inline double CH3(int x, double k) //把第x行提出一个公因数k
{for (int i = 1; i <= n; ++i)a[x][i] /= k;return k;
}
int main()
{scanf("%lf", &n);for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)scanf("%lf", &a[i][j]);for (int i = 1; i < n; ++i){   sum=i;while (a[i][i] == 0 && sum<=n) //对是否a[i][i]是0的特判
        {CH2(i, sum + 1); //交换x列和y列ans *= -1;sum++;}ans *= CH3(i, a[i][i]);for (int j = i + 1; j <= n; ++j)CH1(i, j, a[j][i]);}for (int i = 1; i <= n; ++i)ans *= a[i][i];printf("%0.0lf", ans);return 0;
}
 

 

 

 

转载于:https://www.cnblogs.com/this-is-M/p/10698562.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(软件工程)用例说明模板

在画完用例图后&#xff0c;往往需要为图中的用例写用例说明&#xff0c;使得这些用例更加的清楚&#xff0c;流程更加完整 其中一种用例说明的模板如下&#xff1a; 用例编号&#xff1a;用例名称&#xff1a;&#xff08;跟用例图一致&#xff09;执行者&#xff1a;用例说明…

蓝桥杯(java)基础练习 龟兔赛跑

问题描述话说这个世界上有各种各样的兔子和乌龟&#xff0c;但是研究发现&#xff0c;所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛&#xff0c;小华对此很感兴趣&#xff0c;于是决定研究不同兔子和乌龟的赛跑。他发现…

$.ajax的标准写法

var baseurl "http://" //后台的url $.ajax({ url:baseurl"后台的接口", //请求的url地址 dataType:"json", //返回格式为json async:true,//请求是否异步&#xff0c;默认为异步&#xff0c;这也是ajax重要特性 data:{ //这里是…

(软件项目管理)项目会议纪要模板

备注&#xff1a; 七: 1、报送&#xff1a;把整理好的会议的内容报给上级的相关部门。2、主送&#xff1a;把整理好的会议的内容发放给下级相关部门。3、抄送&#xff1a;把整理好的会议的内容送给相关的同级单位或不相隶属的单位。

(软件测试)代码覆盖(语句覆盖,分支覆盖,条件覆盖,条件组合覆盖,路径覆盖)

一、概念 语句覆盖/代码行覆盖&#xff1a;目标☞保证程序中每一条语句最少执行一次&#xff0c;其覆盖标准无法发现判定中逻辑运算的错误&#xff1b; 判定覆盖/分支覆盖&#xff1a;是指选择足够的测试用例&#xff0c;使得运行这些测试用例时&#xff0c;每个判定的所有可能…

js 字符串,数组扩展

console.log(Array.prototype.sort)//ƒ substring() { [native code] }console.log(String.prototype.substring)//字符串扩展String.prototype.addstring function(){return this字符串扩展}console.log(ff.addstring())//ff字符串扩展转载于:https://www.cnblogs.com/whlBo…

DecimalFormat 用法

DecimalFormat含义用法 ①DecimalFormat 是 NumberFormat 的一个具体子类&#xff0c;用于格式化十进制数字。 ②该类设计有各种功能&#xff0c;使其能够分析和格式化任意语言环境中的数&#xff0c;包括对西方语言、阿拉伯语和印度语数字的支持。它还支持不同类型的数&#x…

EVE-NG安装步骤

首先&#xff0c;需要EVE-NG客户端工具包 1、 1.1部分图 点击next 2、 保持默认全选&#xff0c;点击next 3、 点击install 4、选择I accept the agreement&#xff0c;点击next 5、下一步&#xff0c;继续点击next 6、选定安装位置&#xff0c;不清楚就默认C盘&#x…

第三次实验

Part1: 验证性内容 在循环中使用控制语句continue和break&#xff0c; 其功能区别是什么&#xff1f; continue是停止当前语句的执行&#xff0c;回到第一条语句继续执行&#xff0c;而break是直接结束循环。 在两层嵌套循环中&#xff0c;内层循环中如果出现continue&#xf…

vim命令杂烩(复制粘贴、建文件、撤销等)

vim 有底线命令&#xff0c;插入&#xff0c;命令方式&#xff0c;在进行复制、撤销等操作时&#xff0c;文件应处于命令方式&#xff0c; 若处于编辑模式&#xff0c;可点击ESC&#xff0c;再进行操作 一、撤销 点击 u , 撤销上一步 二、粘贴 p 三、复制 yy复制游标所…

vim三种模式

看到这个文章&#xff0c;觉得讲得很好 Vim和Vi一样具有三种模式&#xff1a;命令模式&#xff08;Command mode&#xff09;&#xff0c;插入模式&#xff08;Insert mode&#xff09;和底线命令模式&#xff08;Last line mode&#xff09;。 当用户处于不同模式的时候&…

print的小白用法

print的用法 print函数概述&#xff1a;print() 方法用于打印输出&#xff0c;是python中最常见的一个函数。 参数如下所示&#xff1a;print(*objects, sep , end\n, filesys.stdout) 参数的具体含义如下&#xff1a; objects --表示输出的对象。输出多个对象时&#xff0c;需…

Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别

看到几篇博客&#xff0c;觉得写的不错 原文&#xff1a;https://blog.csdn.net/x1269778817/article/details/46535729 和http://blog.zol.com.cn/2322/article_2321763.html $()和 &#xff1a; 在 bash shell 中&#xff0c;$( ) 与 (反引号) 都是用来做命令替换用(c…

[转]动态规划DP的分类

链接地址&#xff1a;http://www.cnblogs.com/Renyi-Fan/p/9285495.html 转载于:https://www.cnblogs.com/zifeiy/p/10716445.html

Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

Shell中的特殊字符有 1、$ 美元符 2、\ 反斜杠 3、 反引号 4、" 双引号 5、< ,>;,*,?,[,] 下面我一一举列说明 一、$符号 1、echo $? 显示的是上一条指令退出状态 2、echo "$?" 效果同上 3、echo $? 显示的是$? 4、echo \$? 显示的是$?…

WPF编程,将控件所呈现的内容保存成图像的一种方法。

WPF编程&#xff0c;将控件所呈现的内容保存成图像的一种方法。 原文:WPF编程&#xff0c;将控件所呈现的内容保存成图像的一种方法。版权声明&#xff1a;我不生产代码&#xff0c;我只是代码的搬运工。 https://blog.csdn.net/qq_43307934/article/details/87278138 实现只对…

Linux shell脚本中shift的用法说明

原文&#xff1a;https://blog.csdn.net/zhu_xun/article/details/24796235 shift命令用于对参数的移动(左移)&#xff0c;通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理&#xff08;常见于Linux中各种程序的启动脚本&#xff09;。 示例1:依次读取…

$0,$#,$@,$+特殊符号的含义,shell的传递参数

$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推……$0 为执行的文件名 echo "执行的文件名&#xff1a;$0"; echo "第一个参数为&#xff1a;$1"; echo "第二个参数为&#xff1a…

二维数组(声明以及遍历)

首先图面理解二维数组&#xff08;数组里面的元素不是字符或者数字类型而是另外一个数组&#xff09;! 一&#xff0c;二维数组的声明 int[ ] [ ] arr; 初始化一个能存3个一维数组的二维数组 arr new int [3] [ ]; (此时只声明了一个二维数组的空间&#xff0c;并没有声明一维…

linux shell中的eval命令

语法&#xff1a;eval cmdLine eval会对后面的cmdLine进行两遍扫描&#xff0c;如果第一遍扫描后&#xff0c;cmdLine是个普通命令&#xff0c;则执行此命令&#xff1b;如果cmdLine中含有变量的间接引用&#xff0c;则保证间接引用的语义。 举例如下&#xff1a; set 11 22 …