Định thức


Submit solution

Points: 3 (partial)
Time limit: 1.0s
Memory limit: 98M

Author:
Problem types
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Cho ma trận vuông cấp \(n(1\le n \le 100)\) , Bạn hãy lập trình tính giá trị của định thức

Input

Dòng đầu là số tự nhiên n là cấp của ma trận n dòng sau mỗi dòng chứa n số thực biểu thị các giá trị tương ứng của ma trận

Output

Một số thực duy nhất với độ chính xác 2 chữ số sau dấu chấm thập phân là giá trị của định thức

Ví dụ 1

Input

3
2   3   4
-2  2   0
1   2   3

Output

6.00

Ví dụ 2

Input

3
0   3   4
0   2   0
0   2   3

Output

0.00

Comments


  • 0
    minyoongi  commented on Oct. 22, 2020, 8:42 a.m. edited
    #include<bits/stdc++.h>
    #include<vector>
    using namespace std;
    void lu(double a[100][100],double l[100][100],double u[100][100],int n)
    {
        for(int k=0;k<n;k++)
        {
            u[k][k]=a[k][k];
            l[k][k]=1;
            for(int i=k+1;i<n;i++)
            {
                l[i][k]=a[i][k]/u[k][k];
                u[k][i]=a[k][i];
                u[i][k]=0;
                l[k][i]=0;
            }
            for(int i=k+1;i<n;i++)
            for(int j=k+1;j<n;j++)
            a[i][j]=a[i][j]-l[i][k]*u[k][j];
            }
    }
    double dinhthuc(double a[100][100],int n)
    {
        double t=1;
        for(int i=0;i<n;i++)
        t*=a[i][i];
        return t;
    }
    int main()
    {
        int n;
        double a[100][100];
        cin>>n;
        for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        cin>>a[i][j];
        double l[100][100],u[100][100];
        lu(a,l,u,n);
        printf("%.2lf",fabs(1.0*dinhthuc(u,n)));
    
       return 0;
    }