Qualcosa ci va pur messo!
Scherzi a parte, non è difficile, puoi arrivarci da solo. Indizio: quali sono le combinazioni semplici in base 3 dell'insieme
{0, 1, 2, 3, 4}
?
char v[n] = {a, b, c, d, e};
unsigned int u_1[k] = {0,1,2};
unsigned int u_2[k] = {0,1,3};
unsigned int u_3[k] = {0,1,4};
unsigned int u_4[k] = {0,2,3};
unsigned int u_5[k] = {0,2,4};
unsigned int u_6[k] = {0,3,4};
unsigned int u_7[k] = {1,2,3};
unsigned int u_8[k] = {1,2,4};
unsigned int u_9[k] = {1,3,4};
unsigned int u_10[k] = {2,3,4};
{v[u_1[0]], v[u_1[1]], v[u_1[2]]} ≡ {v[0], v[1], v[2]} ≡ {a, b, c}
{v[u_2[0]], v[u_2[1]], v[u_2[2]]} ≡ {v[0], v[1], v[3]} ≡ {a, b, d}
{v[u_3[0]], v[u_3[1]], v[u_3[2]]} ≡ {v[0], v[1], v[4]} ≡ {a, b, e}
...
{v[u_8[0]], v[u_8[1]], v[u_8[2]]} ≡ {v[1], v[2], v[4]} ≡ {b, c, e}
{v[u_9[0]], v[u_9[1]], v[u_9[2]]} ≡ {v[1], v[3], v[4]} ≡ {b, d, e}
{v[u_10[0]], v[u_10[1]], v[u_10[2]]} ≡ {v[2], v[3], v[4]} ≡ {c, d, e}
bool next_combination(unsigned int n, unsigned int k, unsigned int u[k]);
bool next_combination(int n, int k, int u[k])
{
for (int i = 0; i < k; i++)
{
int max = n - k + i;
if (u[k] < max)
{
u[k]= u[k]++;
}
else
{
u[k]= u[k]--;
}
}
for (int j = 0; j < k; j++)
cout << u[j] << endl;
return;
}
#include <iostream>
//stampare a schermo tutte le combinazioni semplici delle prime 5 lettere dell'alfabeto prese 3 alla volta.
using namespace std;
bool next_combination(unsigned int n, unsigned int k, unsigned int *u)
{
for(unsigned int i = 0; i < k; ++i)
{
if(u[k - i - 1] < n - i - 1) //il secondo termine rappresenta il massimo relativo al generico elemento
{
++u[k - i - 1];
for(unsigned int j = k - i; j < k; ++j)
{
u[j] = u[j - 1] + 1;
}
return true;
}
}
return false;
}
int main()
{
const unsigned int n = 5;
const unsigned int k = 3;
char v[n] = {'a', 'b', 'c', 'd', 'e'};
unsigned int u[k] = {0, 1, 2};
do
{
for(unsigned int i = 0; i < k; ++i)
{
cout << v[u[i]] << " ";
}
cout << endl;
}
while(next_combination(n, k, u));
}
Ok, ma in pratica invece di utilizzare i numeri, tu hai creato un array di char.
Ora per far variare k bisogna incapsulare tutto in un ciclo, in modo che stampi tutte le combinazioni con 1, 2..n-1 element, giusto?
Visitano il forum: Nessuno e 1 ospite