#include <iostream> #include <iomanip> using namespace std; #define N 5 int checkExist(int value, int* a, int n) { for (int i = 0; i < n; ++i) if (a[i] == value) return i; return -1; } void frequencyTable(int* a, int*& b, int& n,int*& fre) { b = new int[N]; n = 0; fre = new int[N]; int temp;//initial var & array for (int i = 0; i < N; ++i) fre[i] = 1;//inittial value for (int i = 0; i < N; ++i) { temp = checkExist(a[i], b, n); if (temp != -1) fre[temp]++; else b[n++] = a[i]; } } void prtFreTab(int* a, int n, int* fre) { cout << '\n'; cout << setw(15)<<left << "Value: "; for (int i = 0; i < n; ++i) cout << a[i] << "\t"; cout << "\n"; cout << setw(15) << left << "Frequency: "; for (int i = 0; i < n; ++i) cout << fre[i] << "\t"; cout << '\n'; } void prtSet(int* a,int* set,int n){ for (int i = 0; i < n; ++i) for (int j = 1; j <= set[i]; ++j) cout << a[i] << " "; cout << '\n'; } void generate(int k, int* set,int* a,int* fre,int n) { if (k == n) { prtSet(a, set, n); return; } for (int i = k; i < n; ++i) { for (int j = 0; j <= fre[i]; ++j) { set[i] = j; generate(k + 1, set, a, fre, n); set[i] = 0; } } } void generateSet(int* a) { int* b = nullptr, * fre = nullptr, n = 0; frequencyTable(a, b, n, fre); prtFreTab(b, n, fre); int* set = new int[n]; for (int i = 0; i < n; ++i) set[i] = 0; generate(0, set, b, fre, n); /*delete[]fre,b;*/ } int main() { int a[N]; for (int i = 0; i < N; ++i) cin >> a[i]; generateSet(a); return 0; }