J'essaie de générer une liste de sous-ensembles à partir d'un ensemble. Par exemple, si je devais n = 6, et r = 4, j'aurais 15 combinaisons possibles qui seraient les suivantes: si n = 6 & rJ'essaie de générer une liste de tous les sous-ensembles r, de l'ensemble, n. Mon code fonctionne si n-r = 2, mais si> 2, affiche une sortie incorrecte
0 1 2 3
0 1 2 4
0 1 2 5
0 1 3 4
0 1 3 5
0 1 4 5
0 2 3 4
0 2 3 5
0 2 4 5
0 3 4 5
1 2 3 4
1 2 3 5
1 2 4 5
1 3 4 5
2 3 4 5
Mon code actuel ne fonctionne avec les sous-ensembles ci-dessus = 4. Il fonctionne également si n'importe quelle autre combinaison de nr = 2. Cela ne marche pas pour autre chose et j'ai un peu de mal à déboguer puisque mon code est parfaitement logique pour moi. Le code que j'ai est le suivant:
int array[r];
int difference = n-r;
for(int i = 0; i < r; i++){
array[i] = i;
}
while (array[0] < difference){
print (array, r);
for(int i = r-1; i >= 0; i--){
if ((array[i] - i) == 0){
array[i] = array[i] + 1;
for (int j = i+1; j < r; j++){
array[j] = j + 1;
}
i = r;
}
else{
array[i] = array[i] + 1;
}
print (array, r);
}
}
}
Pour donner un peu de contexte, lorsque je branche n = 6 et r = 3, je suis censé avoir 20 combinaisons comme la sortie. Seuls 14 sont imprimés, cependant:
0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
2 3 4
2 3 5
2 4 5
3 4 5
Il se imprime la première et la dernière sortie correctement, mais je dois avoir toutes les sorties imprimées et correctes. Je peux voir après la 3ème itération, le code commence à échouer car il va de 0 1 4 à 0 2 3 quand il devrait aller à 0 1 5 à la place. Des suggestions sur ce que je fais mal?
Probablement un bug. Fournir un [mcve] qui inclut ce que vous entendez par «ne fonctionne pas» peut accélérer votre obtention d'une réponse. – user4581301
Avez-vous essayé de déboguer votre code, surtout lorsque vous passez de la 3ème à la 4ème itération pour voir ce qui fonctionne différemment de vos attentes? – yasd
J'ai, oui. Je comprends qu'il y a un modèle avec la valeur stockée dans le tableau avec le numéro d'emplacement. Donc, pour l'exemple ci-dessus, si vous soustrayez la valeur du tableau avec le numéro d'emplacement, le modèle ressemblera à: (0, 1, 2, 0, 1, 2, 1, 2, 2, 0, 1, 2, 1, 2, 2, 1, 2, 2, 2) J'ai remarqué avec tous les 2, c'est quand le code échoue. J'ai d'abord écrit le code quand le motif était (0, 1, 0, 1, 1, 0, 1, 1, 1 ... etc.), Ce qui explique pourquoi si n-r = 2 fonctionne. Cependant, je pense que puisque j'ai la déclaration d'autre, il prendrait soin de tout le reste, y compris les 2 dans le modèle, mais apparemment pas. – Amanda