VL07 - Tính tổ hợp

View as PDF

Submit solution


Points: 1.00 (partial)
Time limit: 1.0s
Memory limit: 256M

Author:
Problem type
Allowed languages
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Viết chương trình tính tổ hợp chập ~k~ của ~n~ phần tử có công thức như dưới đây:

$$C_{n}^{k} = \frac{n!}{k!(n-k)!}$$

Giới hạn

  • ~ 1 \le k \le n \le 25 ~

Input

Lần lượt là 2 số n, k cách nhau bởi khoảng trắng

Output

Kết quảtổ hợp chập ~k~ của ~n~

Sample

Input #1
5 2
Output #1
10

Comments

Please read the guidelines before commenting.



  • 0
    ngvanluan  commented on May 3, 2024, 1:33 p.m.

    code c++ của mình, mọi người có thể tham khảo :'>>

    #include <iostream>
    using namespace std;
    int main()
    {
        int n, k;
        cin >> n >> k;
        int arr[100][100];
        arr[0][0] = 1;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 0; j <= i; j++)
            {
                if (j == 0 || j == i)
                {
                    arr[i][j] = 1;
                }
                else
                {
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
                }
            }
        }
        cout << arr[n][k];
    
        return 0;
    }
    

    • 0
      B23DCCN779  commented on May 9, 2024, 6:30 p.m.

      quá giới hạn của unsigned long long nên dùng double :)) thế là ac

      include <iostream>

      double giaithua(int a) { if (a == 0) { return 1; } return giaithua(a - 1) * a; } int main() { int n, k; std::cin >> n >> k; std::cout << giaithua(n) / (giaithua(k) * giai_thua(n - k)); return 0; }


      • 0
        lehongduc  commented on May 15, 2024, 11:45 a.m.

        long double :)


  • 0
    NgoDinhCan  commented on April 29, 2024, 3:53 p.m.

    n, k = map(int,input().split()) def gt(n): if n == 0 or n == 1: return 1 else: return(ngt(n-1)) print(int(gt(n)/(gt(k)gt(n-k))))


  • 0
    kyluat2712  commented on April 15, 2024, 4:35 p.m.

    include<iostream>

    using namespace std; int main(){ long long k,n; long long a=1; long long b=1; cin>>n>>k; if(k==n||k==0){ cout<<"1"; }else{ for(int i=n-k+1;i<=n;i++){ a=i; } for(int j=1;j<=k;j++){ b=j; } cout<<a/b; } } C++ AC ae tham khảo


  • 0
    tris23  commented on April 12, 2024, 1:17 p.m.

    đề không rõ ràng nên sai test nhiều

    include <iostream>

    include<iomanip>

    using namespace std; long double giaithua(long double n) { if(n==1) return 1; return n*giaithua(n-1); }

    int main() { long double n, k; cin>>n>>k; if(n>=k) { if (n>=1 && k>=1) { if(k<=25 &&n<=25) { cout<<giaithua(n)/(giaithua(k)*giaithua(n-k)); } } } else { cout <<"MATH ERROR"; return 0; } return 0; }


  • 5
    nguyenductoan59  commented on April 3, 2024, 3:05 p.m.

    C++ ĐÃ AC NHAA CHO MÌNH XIN 1 VOTE Ạ

    include <bits/stdc++.h>

    using namespace std;

    int main()

    {

    long double n, k, N = 1, K = 1, S = 1;
    cin >> n >> k;
    if ( n >= k )
    {
        if ( n >= 1 && k >= 1 )
        {
            if ( k <= 25 && n <= 25 )
            {
                for ( int f = 1 ; k >= f ; f++ )
                {
                    K *= f;
                }
            }
            for ( int j = 1 ; n >= j ; j++ )
            {
                N *= j;
            }
        }
        for ( int i = 1 ; ( n - k ) >= i ; i++ )
        {
            S *= i;
        }
        cout << N / ( K * S ) << endl;
    }
    else
    {
        cout <<"MATH ERROR"<< endl;
    }
    return 0;
    

    }


  • 3
    tienphat2101  commented on March 19, 2024, 3:23 a.m.

    Cho bạn nào chưa AC hết được, thì nếu cái này các bạn tính giai thừa hay là chạy for gì đó nó đều bị tràn số nhé( test case 5). Để AC được hết thì các bạn cần dùng tam giác pascal nhé. Code full AC cho ae tham khảo:

    #include <iostream>
    using namespace std;
    
    long long solve(int n, int k) {
    if (k > n - k) {
        k = n - k;
    }
    long long result = 1;
    for (int i = 0; i < k; ++i) {
        result *= (n - i);
        result /= (i + 1);
    }
    return result;
    }
    
    int main() {
    int n, k;
    cin >> n >> k;
    cout << solve(n, k) << endl;
    return 0;
    }
    

  • -3
    Angel  commented on Feb. 26, 2024, 4:27 a.m.

    n,k=map(int,input().split()) if (n>k) and (n>0) and (k>0): S=1 j=1 A=1 for i in range (2,n+1): S=i for a in range (2,k+1): j=a for b in range (2,(n-k)+1): A=b c=S/(jA) print(int(c)) else: print("Math Error")


  • -4
    Khanhll123  commented on Feb. 25, 2024, 3:13 a.m.
    =)))
    

  • -1
    Chutecobac  commented on Feb. 23, 2024, 4:36 p.m.

    include <bits/stdc++.h>

    using namespace std;

    int main() {

    long double n, k, N = 1, K = 1, S = 1;  
    cin >> n >> k;  
    if ( n >= k ){
        if ( n >= 1 && k >= 1 ){
            if ( k <= 25 && n <= 25 ){
                for ( int f = 1 ; k >= f ; f++ ){
                    K *= f; 
                } 
            } 
            for ( int j = 1 ; n >= j ; j++ ){
                N *= j; 
            } 
        } 
        for ( int i = 1 ; ( n - k ) >= i ; i++ ){
            S *= i; 
        } cout << N / ( K * S ) << endl;  
    } else { 
    cout <<"MATH ERROR"<< endl; 
    }
    

    return 0;

    }


  • 0
    stonerduy  commented on Feb. 22, 2024, 4:16 p.m.

    Bài mình dùng hàm thôi nhé

    /#include<iostream> using namespace std; unsigned long long gt(int n) {unsigned long long x=1; if ((n==0)||(n==1)) return x;else for (int i=1;i<=n;i++) x=i; return x; } int main() { long long kq=1;int k,n,t;cin>>n>>k; t=n-k; if (t>k){ for (int i=t+1;i<=n;i++) kq=i;kq/=gt(k); } else {for (int i=k+1;i<=n;i++) kq*=i;kq/=gt(t);} cout<<kq; return 0;

    }


  • 1
    vodung04  commented on Feb. 17, 2024, 9:27 a.m.

    test case 5 là gì v


    • 0
      stonerduy  commented on Feb. 22, 2024, 4:16 p.m.

      25 3 đó


  • -1
    minh2312130  commented on Jan. 20, 2024, 10:17 a.m.

    cho mình xin testcase 3 với mn ơi


    • 0
      OriBoys  commented on Feb. 13, 2024, 4:03 p.m.

      n = 15 k = 10


  • 0
    thh  commented on Jan. 14, 2024, 11:36 a.m.

    include <bits/stdc++.h>

    define int long long

    using namespace std;

    int n, k; int gt(int n) {

    int res = 1;
    for(int i = 2;i <= n; ++i)
        res *= i;
    return res;
    

    } int C(int k, int n) {

    if(k == n || k == 0)
        return 1;
    return C(k - 1, n - 1) + C(k, n - 1);
    

    } void solve() {

    cin >> n >> k;
    cout << C(k, n);
    

    }

    main() { ios::syncwithstdio(false); cin.tie(nullptr);cout.tie(nullptr);

    solve();
    return 0;
    

    }


  • -2
    hkv  commented on Jan. 14, 2024, 5:25 a.m.

    include <stdio.h>

    // tinh luy thua 1 so

    long long luy_thua(long long a){ long long res=1; for(long long i=res; i<= a; i++){ res*=i; } return res; }

    //tinh to hop chap k cua n

    long long tohop(long long n, long long k){ long long tohopchapkcuan=luythua(n)/(luythua(k)*luythua(n-k)); return tohopchapkcuan; } int main(){ long long n, k; scanf("%lld %lld", &n, &k); printf("%lld", to_hop(n, k)); } cho hỏi sao sai test 5 vậy ạ


  • -1
    DKN13  commented on Jan. 11, 2024, 12:54 p.m.

    To hop

    def toHop(k,n):

    if k==0 or k==n:
        return 1
    elif k==1:
        return n
    else:
        return toHop(k-1,n-1) + toHop(k,n-1)
    

    n,k = [int(x) for x in input().split()]

    print(toHop(k,n))


  • -1
    hoanngggg  commented on Jan. 9, 2024, 2:30 p.m.

    hàm tính C bằng đệ quy cho ai cần int C(int a, int b) { if (a == 0 or a == b) return 1; if (a == 1) return b; return C(a - 1, b - 1) + C(a, b - 1); }


  • -1
    trinhtheanh3010  commented on Dec. 15, 2023, 5:43 p.m.

    case cuối là gì v mn


  • 0
    Tuan_Kiettt  commented on Dec. 14, 2023, 2:09 p.m.

    help với ,C++20


  • 2
    tungkq123  commented on Nov. 28, 2023, 5:39 a.m.

    mong admin lên cho hiện phần dữ liệu test case như các web code leet code để khi sai tìm lỗi cho dễ ạ


  • -2
    dungolduck  commented on Nov. 25, 2023, 4:23 a.m.

    bài này ăn đc case cuối mấy bạn xài qhd dựa theo tam giác pascal!


  • -1
    neuoavs  commented on Oct. 17, 2023, 10:31 a.m.

    include <iostream>

    bool check (int value){ if (1 <= value && value <= 25) return 1; else return 0;
    } long long C(int n , int k){ long long tu = 1, mau = 1; for (int i = n ; (n - k) < i; i--){ tu *= i; } for (int i = k ; 1 <= i ; i--){ mau *= i; } return tu/mau;

    } int main(){ int n, k; std::cin >> n >> k; if (k <= n && check(n) && check(k)) std::cout << C(n,k); return 0;
    }

    <C++>


  • -1
    minh253  commented on Sept. 24, 2023, 1:47 a.m.

    java 8 nhe

    import java.util.*;

    public class Combination {

    static long C(long n, long k){
        if (k==0 || k==n)   return 1;
        return C(n-1,k-1) + C(n-1,k);
    }
    public static void main (String[] args){
        Scanner inp = new Scanner (System.in);
        long n = inp.nextLong(), k = inp.nextLong();
    
        System.out.print(C(n,k));
    }
    

    }

    // chương trình tính tổ hợp chập k của n phần tử


  • 1
    godcyber  commented on Aug. 21, 2023, 2:46 a.m.

    Công thức bên trên chỉ chạy được một phần thôi, chạy số to hơn tí là tràn bộ nhớ rồi nên phải dùng công thức truy hồi mới đúng.


  • -2
    khanhdat4  commented on July 23, 2023, 11:39 a.m.

    testcase cuối là gì ấy nhỉ


    • 0
      garennoier  commented on Aug. 15, 2023, 2:17 p.m.

      25 voi 3 do loi tran so ban xem lai nhe