Загрузка данных


#include <stdio.h>
#include <stdlib.h>


double determinant(double **a, int n)
{

    if(n == 1)
        return a[0][0];


    if(n == 2)
        return a[0][0]*a[1][1] - a[0][1]*a[1][0];


    double det = 0;


    for(int k = 0; k < n; k++)
    {

        double **minor = malloc((n-1) * sizeof(double *));


        for(int i = 0; i < n-1; i++)
            minor[i] = malloc((n-1) * sizeof(double));


        for(int i = 1; i < n; i++)
        {

            int col = 0;

            for(int j = 0; j < n; j++)
            {

                if(j == k)
                    continue;


                minor[i-1][col] = a[i][j];

                col++;

            }
        }


        double sign = (k % 2 == 0) ? 1 : -1;


        det += sign * a[0][k] * determinant(minor, n-1);


        for(int i = 0; i < n-1; i++)
            free(minor[i]);


        free(minor);

    }


    return det;
}



int main()
{

    int n;


    if(scanf("%d",&n)!=1 || n<=0)
    {
        printf("n/a");
        return 1;
    }


    double **matrix = malloc(n*sizeof(double *));


    for(int i=0;i<n;i++)
        matrix[i]=malloc(n*sizeof(double));



    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%lf",&matrix[i][j]);



    printf("%.6lf", determinant(matrix,n));



    for(int i=0;i<n;i++)
        free(matrix[i]);


    free(matrix);


    return 0;
}