Liệt kê các mảng con có ít nhất k phần tử

Bài toán như sau:
Nhập vào mảng A gồm n phần tử , in ra các mảng con có số phần tử >=k , với k được nhập từ bàn phím.
VD: A[1 2 3 4] và k=2 thì in ra:
1 2
1 2 3
1 2 3 4
2 3
2 3 4
3 4
Mong mọi người giúp mình về ý tưởng làm và code (C/C++ thì tốt).

Bạn có thể lên google search về thuật toán backtracking nhé. Bài này theo mình là dùng cái đấy.:slight_smile: Hoặc đơn giản có thể dùng for lồng

k nhập từ bàn phím.

1 Like

Tìm tất cả các tập con k phần tử từ n phần

#include <iostream>
using namespace std;
// Hàm in cấu hình
void Print(int *A, int N) { 
    for(int i = 1; i <= N; ++i) cout << A[i] << " "; 
    cout << endl;
}
// Giải thuật BackTracking
void Try(int *A, int i, int N, int K) {
    for(int j = A[i - 1] + 1; j <= N - K + i; ++j) {
        A[i] = j;
        if(i == K) Print(A, K);
        else Try(A, i + 1, N, K);
    }
}

main()
{
    int N, K; cin >> N >> K;
    int A[N + 1] = {0};
    for(int i = K; i <= N; ++i) Try(A, 1, N, i);
    return 0;
}

Bạn thử dựa vào code ở trên và giải bài của bạn nhé

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?