Ho una funzione che riceve n ek per creare tutte le possibili permutazioni di n scegliere k, e mentre funziona per la maggior parte delle combinazioni come 5 scegli 3 o 3 scegli 2, non lo fa per altri come 4 scegli 2. Ho bisogno di aiuto per trovare e capire il bug. Grazie per aver guardato.La generazione N sceglie Permutazioni K in C++
La funzione:
void PermGenerator(int n, int k)
{
int d[] = {1,2,3,4,5,6,7,8,9};
sort (d, d+n);
cout << "These are the Possible Permutations: " << endl;
do
{
for (int i = 0; i < k; i++)
{
cout << d[i] << " ";
if (i == k-1) cout << endl;
}
} while (next_permutation(d, d+n));
}
sto usando la funzione next_permutation. cplusplus
Quando provo 4 Scegliere 2, dovrei ottenere 12 permutazioni, invece ottengo questo:
1 2
1 2
1 3
1 3
1 4
1 4
2 1
2 1
2 3
2 3
2 4
2 4
3 1
3 1
3 2
3 2
3 4
3 4
4 1
4 1
4 2
4 2
4 3
4 3
considerando che, 3 scegliere 2 funziona perfettamente con 6 possibili permutazioni:
1 2
1 3
2 1
2 3
3 1
3 2
Grazie! Questo ha fatto il trucco. Come ho detto sopra, stavo emettendo i primi k elementi dell'array e non l'ho visto. – Corghee
@Corghee: nota che c'è un modo ancora più semplice ed efficiente di farlo usando 'std :: reverse'. Vedi http://stackoverflow.com/a/2616837/951890 –