flag
蓝桥杯第27天
题目介绍
问题描述
给定一个N×N的矩阵A,求|A|。
输入格式
第一行一个正整数N。
接下来N行,每行N个整数,第i行第j个数字表示A[i][j]。
输出格式
一行,输出|A|。
样例输入
2
1 2
3 4
样例输出
-2
数据规模和约定
0<N≤6
-10≤A[i][j]≤10
思路
递归的思路,将高维化为低维。
二维的时候用对角线乘积相减即可
一维直接输出arr[0][0]
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int [][]arr=new int[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arr[i][j]=input.nextInt();
}
}
System.out.println(getDet(arr,n));
}
public static int getDet(int [][]arr,int n){
if(n==1){
return arr[0][0];
}
if(n==2){
return arr[0][0]*arr[1][1]-arr[0][1]*arr[1][0];
}
int answer=0;
int [][]temp=new int[n-1][n-1];
for(int i=0;i<n;i++) {
for(int row=0; row<n-1; row++) {
for(int col=0; col<i; col++)
temp[row][col] = arr[row+1][col];
for(int col=i; col<n-1;col++)
temp[row][col] = arr[row+1][col+1];
}
answer += arr[0][i]*getDet(temp,n-1)*(i%2==0?1:-1);
}
return answer;
}
}
来源:CSDN
作者:generous~
链接:https://blog.csdn.net/weixin_44076848/article/details/104149581