题目描述
给你一个N(n≤10)阶行列式,请计算出它的值
输入输出格式
输入格式:
第一行有一个整数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
无敌水的板子
主要用到了高斯消元的知识(但略有不同)
不会的可以看看上一篇博文
直接来代码QAQ
#include<bits/stdc++.h> using namespace std; double n, a[20][20], ans = 1; int sum; inline void qwq(int x, int y, double k) { for (int i = 1; i <= n; ++i) a[y][i] -= (double)(k * a[x][i]); } inline void qaq(int x, int y) { for (int i = 1; i <= n; ++i) swap(a[i][x], a[i][y]); } inline double QAQ(int x, double 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) { qaq(i, sum + 1); ans *= -1; sum++; } ans *= QAQ(i, a[i][i]); for (int j = i + 1; j <= n; ++j) qwq(i, j, a[j][i]); } for (int i = 1; i <= n; ++i) ans *= a[i][i]; printf("%0.0lf", ans); return 0; }
ok,非常漂亮