pppphhhhyyyy 2023-05-16 17:15 采纳率: 80.6%
浏览 35
已结题

C语言实现3阶以上行列式的计算

想请问一下这个3阶以上行列式的计算该怎么实现?我的想法是用递归,但是后面的余子式想不明白

img

  • 写回答

2条回答 默认 最新

  • P2441M 2023-05-16 17:40
    关注

    其实可以用高斯消元法的,难度上、时间复杂度上都比递归要好。但是既然题主要求,就这样写了:

    #include <stdio.h>
    #include <stdlib.h>
    
    int **CreateMatrix(int n)
    {
        int **matrix = (int**)malloc(n * sizeof(int*));
        for (int i = 0; i < n; ++i)
        {
            matrix[i] = (int*)malloc(n * sizeof(int));
        }
        return matrix;
    }
    
    int **Minor(int n, int **matrix, int i, int j)
    {
        if (n == 1) return NULL;
        int **result = CreateMatrix(n - 1);
        for (int x = 0; x < n - 1; ++x)
        {
            for (int y = 0; y < n - 1; ++y)
            {
                result[x][y] = matrix[x < i ? x : x + 1][y < j ? y : y + 1];
            }
        }
        return result;
    }
    
    int Determinant(int n, int **matrix)
    {
        if (n == 1) return matrix[0][0];
        int det = 0;
        for (int i = 0; i < n; ++i)
        {
            det += (i % 2 == 0 ? 1 : -1) * matrix[0][i] * Determinant(n - 1, Minor(n, matrix, 0, i));
        }
        return det;
    }
    
    int main()
    {
        int n;
        printf("输入方阵的行列数: ");
        scanf("%d", &n);
    
        int **matrix = CreateMatrix(n);
    
        printf("输入矩阵:\n");
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                scanf("%d", &matrix[i][j]);
            }
        }
    
        printf("这个矩阵的行列式是 %d", Determinant(n, matrix));
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日