题目描述
给你一个N(n≤10)阶行列式,请计算出它的值
输入输出格式
输入格式:
第一行有一个整数n
在以下n行中,每行有n个整数,表示该行列式输出格式:
这个行列式的值
输入输出样例
输入样例#1:
82 10 4 4 3 6 10 61 10 9 3 2 1 6 73 9 8 7 1 1 8 72 10 8 6 9 9 3 41 7 1 8 2 6 2 39 2 4 8 10 6 10 33 6 7 9 8 2 8 12 9 2 1 10 7 4 5
输出样例#1:
-135742
输入样例#2:
41 2 3 41 3 4 11 4 1 21 1 2 3
输出样例#2:
16 无敌水的板子 主要用到了高斯消元的知识(但略有不同) 不会的可以看看上一篇博文 直接来代码QAQ
#includeusing 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,非常漂亮