计算行列式

跟風遠走 提交于 2020-02-03 00:20:08

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;

    }


}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!