Trong bài toán này, chúng ta được cho hai số nguyên K và n. Nhiệm vụ là in tất cả các dãy tăng độ dài K sử dụng n số tự nhiên đầu tiên.
Dãy tăng là dãy số mà giá trị phần tử sau lớn hơn phần tử trước.
Ví dụ để hiểu vấn đề:
Đầu vào: n = 4, K = 2 → Đầu ra: 1 2, 1 3, 1 4, 2 3, 2 4, 3 4
Để giải quyết, ta tạo mảng độ dài K lưu dãy hiện tại. Với mỗi vị trí, kiểm tra phần tử trước và chọn các phần tử tiếp theo lớn hơn phần tử trước. Thử lần lượt tất cả giá trị từ 1 đến n.
Ví Dụ
Chương trình minh họa logic:
#include<iostream>
using namespace std;
void printSequence(int arr[], int k) {
for (int i = 0; i < k; i++)
cout << arr[i] << " ";
cout << endl;
}
void printKLengthSequence(int n, int k, int &len, int arr[]) {
if (len == k) {
printSequence(arr, k);
return;
}
int i = (len == 0) ? 1 : arr[len - 1] + 1;
len++;
while (i <= n) {
arr[len - 1] = i;
printKLengthSequence(n, k, len, arr);
i++;
}
len--;
}
void generateSequence(int n, int k) {
int arr[k];
int len = 0;
printKLengthSequence(n, k, len, arr);
}
int main() {
int k = 3, n = 4;
cout << "Dãy độ dài " << k << " sinh từ " << n << " số tự nhiên đầu tiên:\n";
generateSequence(n, k);
return 0;
}
Đầu Ra
Dãy độ dài 3 sinh từ 4 số tự nhiên đầu tiên: 1 2 3 1 2 4 1 3 4 2 3 4