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).
Liệt kê các mảng con có ít nhất k phần 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. 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é