问题描述
//据说很多人的题目会有一大堆废话,本傻×就不在这里废话了。
给定一个N×N的矩阵A,求|A|。
给定一个N×N的矩阵A,求|A|。
输入格式
第一行一个正整数N。
接下来N行,每行N个整数,第i行第j个数字表示A[i][j]。
接下来N行,每行N个整数,第i行第j个数字表示A[i][j]。
输出格式
一行,输出|A|。
样例输入
2
1 2
3 4
1 2
3 4
样例输出
-2
数据规模和约定
0<N≤6
-10≤A[i][j]≤10
-10≤A[i][j]≤10
很简单的一道线性代数题目
用简单化的拉普拉斯定理就行了
1 import java.util.*;
2
3 public class Main {
4
5 static int getit(int[][] a, int n) {
6 if(n == 1) return a[0][0];
7 if(n == 2) return a[0][0] * a[1][1] - a[0][1] * a[1][0];
8 int[][] shuzu = new int[n-1][n-1];
9 int ans = 0;
10 for(int i = 0; i < n; ++i) { //每次将a[0][i]的行列去掉,赋值给一个新的数组
11 for(int x = 0; x < n-1; ++x) {
12 for(int y = 0; y < i; ++y)
13 shuzu[x][y] = a[x+1][y];
14 for(int y = i; y < n-1; ++y)
15 shuzu[x][y] = a[x+1][y+1];
16
17 }
18
19
20 ans += a[0][i] * Math.pow(-1, i) * getit(shuzu, n-1); //然后进行递归
21 }
22 return ans;
23 }
24
25 public static void main(String args[]) {
26
27 Scanner sc = new Scanner(System.in);
28 int n = sc.nextInt();
29 int[][] shu = new int[n][n];
30 for(int i = 0; i < n; i++)
31 for(int j = 0; j < n; j++)
32 shu[i][j] = sc.nextInt();
33 System.out.print(getit(shu, n));
34
35
36 }
37 }
同时也激发起我对线性代数的求生欲 0.0