Trong bài toán này, chúng ta được cung cấp một mảng kích thước n và một số nguyên dương r. Ourtask là để in tất cả các kết hợp có thể có của các phần tử của mảng bộ chỉnh sửa.
Hãy lấy một ví dụ để hiểu vấn đề -
Input: {5,6,7,8} ; r = 3 Output : {5,6,7}, {5,6,8}, {5,7,8}, {6,7,8}
Để giải quyết vấn đề này, một cách tiếp cận sẽ là sửa chữa các phần tử và sau đó lặp lại hoặc lặp lại các phần tử khác để tìm tất cả các kết hợp. Trong điều này, trước tiên chúng ta phải sửa n-r + 1 chỉ các phần tử và lặp lại hoặc lặp lại các phần còn lại.
Ví dụ
#include<iostream> using namespace std; void printRElementCombination(int arr[], int combination[], int start, int end, int index, int r){ if (index == r){ cout<<"{ "; for (int j = 0; j < r; j++) cout << combination[j] << " "; cout<<"}\t"; return; } for (int i = start; i <= end && end - i + 1 >= r - index; i++){ combination[index] = arr[i]; printRElementCombination(arr, combination, i+1, end, index+1, r); } } int main(){ int arr[] = {1, 2, 3, 4, 5}; int r = 3; int n = 5; int combination[r]; cout<<"The combination is : \n"; printRElementCombination(arr, data, 0, n-1, 0, r); }
Đầu ra
Sự kết hợp là -
{ 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 3 4 } { 1 3 5 } { 1 4 5 } { 2 3 4 } { 2 3 5 } { 2 4 5 } { 3 4 5 }
Các phương pháp khác để giải quyết vấn đề tương tự có thể bằng cách kiểm tra sự bao gồm của phần tử dòng điện trong tổ hợp và in tất cả các kết hợp của kích thước được yêu cầu. Ý tưởng là giống nhau, chúng tôi sẽ truy xuất phần tử và lưu trữ sự kết hợp trong mảng kết hợp. Nhưng việc sửa chữa phần tử vẫn chưa được thực hiện.
Chương trình dưới đây sẽ giúp bạn hiểu vấn đề hơn -
Ví dụ
#include <iostream> using namespace std; void combinationUtil(int arr[], int n, int r, int index, int combo[], int i){ if (index == r){ cout<<"{"; for (int j = 0; j < r; j++) cout << combo[j] << " "; cout<<"}\t"; return; } if (i >= n) return; combo[index] = arr[i]; combinationUtil(arr, n, r, index + 1, combo, i + 1); combinationUtil(arr, n, r, index, combo, i+1); } int main(){ int arr[] = {1, 2, 3, 4, 5}; int r = 3; int n = 5; int combo[r]; cout<<"The combination is : \n"; combinationUtil(arr, n, r, 0, combo, 0); return 0; }
Đầu ra
Sự kết hợp là -
{ 1 2 3 } { 1 2 4 } { 1 2 5 } { 1 3 4 } { 1 3 5 } { 1 4 5 } { 2 3 4 } { 2 3 5 } { 2 4 5 } { 3 4 5 }