U66785 行列式求值
生活随笔
收集整理的這篇文章主要介紹了
U66785 行列式求值
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二更:把更多的行列式有關(guān)內(nèi)容加了進(jìn)來(%%%%%Jelly Goat奆佬)
題目描述
給你一個(gè)N(n≤10n\leq 10n≤10)階行列式,請(qǐng)計(jì)算出它的值
輸入輸出格式
輸入格式:
第一行有一個(gè)整數(shù)n
在以下n行中,每行有n個(gè)整數(shù),表示該行列式
輸出格式:
這個(gè)行列式的值
輸入輸出樣例
輸入樣例#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首先這是一道非常簡單的板子題,他耗費(fèi)了我兩天將近兩個(gè)多小時(shí)的時(shí)間,那么我們就來細(xì)細(xì)分析一下這道題
思路大致如下:
按照高斯消元法,把行列式消成下三角,然后按照公式直接求對(duì)角線乘積即為答案
有這么幾個(gè)坑
1.忘記用double類型,因?yàn)樾辛惺阶龀ǖ臅r(shí)候肯定是要出小數(shù)的,不用double肯定gg
2.沒有注意當(dāng)a[i][i]==0的時(shí)候,我們沒法按照公式把它下面消為零,所以需要一個(gè)換行操作
代碼如下
while (a[i][i] == 0 && sum<=n) //對(duì)是否a[i][i]是0的特判 {CH2(i, sum + 1); //交換x列和y列ans *= -1;sum++;} 3.輸出的時(shí)候忘記控制精度,其實(shí)原因是這樣的,在小數(shù)點(diǎn)后位數(shù)多于18個(gè)之后,c++會(huì)自動(dòng)轉(zhuǎn)成科學(xué)計(jì)數(shù)法。。。。。。
但是洛谷不認(rèn)啊喂!!!!!!!,所以輸出的時(shí)候手動(dòng)控制一下就好
printf("%0.0lf", ans); 4.各種奇奇怪怪的諸如循環(huán)控制寫錯(cuò)了或者是while條件判錯(cuò)了的詭異失誤,導(dǎo)致我掛了整整五次
不過這種經(jīng)歷也的確是能讓我深刻的記住這道題了吧。
現(xiàn)在貼一下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行提出一個(gè)公因數(shù)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) //對(duì)是否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; }
?
??
轉(zhuǎn)載于:https://www.cnblogs.com/this-is-M/p/10698562.html
總結(jié)
以上是生活随笔為你收集整理的U66785 行列式求值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 变量 和 注释
- 下一篇: 紫书 团队队列(队列)