欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线代矩阵

程序员文章站 2022-07-12 14:14:14
...

线代矩阵

不要忘了改类名
----4月4日

package com.hjh.function;

import java.util.Scanner;

public class test1 {
    public static void main(String[] args) {
//        int[][] a = {
//                {3, 1, -1, 2},
//                {-5, 1, 3, -4},
//                {2, 0, 1, -1},
//                {1, -5, 3, -3},
//        };
//        det = 40;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入矩阵阶数:");
        int n = sc.nextInt();
        int[][] det = new int[n][n];
        System.out.println("请输入数据:");
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                det[i][j] = sc.nextInt();
            }
        }
        System.out.println("矩阵的值是: " + detValue(det));
    }

    public static int detValue(int[][] det) {
        int n = det.length;
        int sum = 0;
        if (n == 1) {
            return det[0][0];
        } else {
            for (int i = 0; i < n; i++) {
                if (i % 2 == 0) {
                    sum += det[i][0] * detValue(detUnfold(det, i));
                } else {
                    sum -= det[i][0] * detValue(detUnfold(det, i));
                }
            }
        }
        return sum;
    }

    // 行列式按第一列展开
    public static int[][] detUnfold(int[][] det, int r) {
        int n = det.length;
        int[][] dett = new int[n - 1][n - 1];
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < n; j++) {
                if (i < r) {
                    dett[i][j - 1] = det[i][j];
                } else if (i > r){
                    dett[i - 1][j - 1] = det[i][j];
                }
            }
        }
        return dett;
    }
}