14137: 【原4137】行列式求值
题目
题目描述
author: fur 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4137
行列式求值
题目描述
现在给出一个\(n\)阶行列式,求出它的值。
输入格式
第一行一个数\(n\)表示行列式阶数
接下来是一个\(n\)行\(n\)列的由整数构成的行列式
样例输入
3
5 1 2
4 2 5
3 4 1
样例输出
-59
数据规模
\(1\leq n\leq 10\)
答案在int范围之内
satgo1546's solution
#include <cstdio>
int det(int a[10][10], int n) {
int minor[10][10];
int r = 0;
int sgn = 1;
if (n == 2) return a[0][0] * a[1][1] - a[1][0] * a[0][1];
for (int i = 0; i < n; i++) {
int c1 = 0, c2 = 0;
for (int j = 1; j < n; j++) {
for (int k = 0; k < n; k++) {
if (k != i) {
minor[c1][c2] = a[j][k];
c2++;
if (c2 > n - 2) {
c2 = 0;
c1++;
}
}
}
}
r += sgn * (a[0][i] * det(minor, n - 1));
sgn = -sgn;
}
return r;
}
int main() {
int a[10][10];
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("%d\n", det(a, n));
}