2011-09-15 3 views
1

Je viens de créer une classe de file d'attente et je dois maintenant l'utiliser pour cela.Aidez-moi à comprendre cet algorithme (simple)

Ecrire un programme C++ pour générer toutes les chaînes en utilisant A, B et C comme les lettres.

Les chaînes doivent être générés dans l'ordre suivant: A B C AA AB AC BA BB BC CA CB CC AAA AAB AAC ABA ABB ABC ACA ACB ACC etc.

Il est supposé le faire jusqu'à ce que ma file d'attente déborde.

Maintenant, je ne comprends pas l'algorithme l'enseignant a proposé l'aide, qui est la suivante.

Démarrer avec A et B et C dans la file d'attente. "Enlever Ajouter puis Ajouter Ajouter"

Le ajout ajouter ajouter quelque chose me rejette, comment cela se fait-il d'obtenir ces lettres dans cet ordre particulier?

Répondre

3

Que notre comportement soit:

For any token X, add XA, XB, and XC to the queue. 

Notre flux sera quelque chose comme:

Start with a Queue 
A B C 

Pop (and display) off A 
B C 

Behave on token: "A" 
    add AA 
    add AB 
    add AC 
B C AA AB AC 

Pop (and display) off B 
C AA AB AC 
    add BA 
    add BB 
    add BC 
C AA AB AC BA BB BC 

Si nous feignons notre fonction est

main() { 
    Queue q; 
    q.add("A"); 
    q.add("B"); 
    q.add("C"); 

    while(true) { 
     process(q.pop()); 
    } 
} 

process(String x, Queue q) { 
    display x; 
    q.add(x + "A"); 
    q.add(x + "B"); 
    q.add(x + "C"); 
} 

Météo rapide?

+0

Eh bien, la file d'attente utilise un tableau de chars donc je comprends ce que vous dites mais je ne suis pas sûr de savoir comment je pourrais mettre en œuvre cela –

+0

C'est en gros comment fonctionne une recherche de grande taille. –

+1

@Tyler Gardez un compteur de position "tête" et "queue". Lorsque vous "pop" prendre 'myArray [tête];' comme ce que vous sautez, puis allez 'head ++;' pour indiquer que vous le déplacez. Lorsque vous ajoutez à la file d'attente, allez 'myArray [tail] = whatImAdding;' pour l'ajouter, et 'tail ++' pour indiquer qu'il a grandi. Cela débordera quand 'queue' essayera d'accéder à quelque chose qui ne fait pas partie de votre tableau. – corsiKa

7

Je pense que votre professeur voulait dire "Ajouter A, Ajouter B, C Ajouter".

Supposons que vous ayez A, B et C dans la file d'attente. Vous déposez le premier de la file d'attente et l'imprimez. Cela devrait imprimer A. Ensuite, vous ajoutez un A à cela. Cela vous donne AA, que vous repoussez dans la file d'attente. Vous ajoutez également un B et ajoutez un C à la chaîne que vous avez fait sauter en dernier (vous donnant AB et AC) et les repoussez dans la file d'attente. Maintenant, votre file d'attente contient [B, C, AA, AB, AC]. Ensuite, vous allez faire apparaître B et faire la même séquence d'opérations, et ainsi de suite jusqu'à ce que vous manquiez d'espace dans votre pile.

0

ABC

imprime un nouvel état de file d'attente BCAAA

imprime B nouveau imprime état de file d'attente CAAABBB

C nouvel état de file d'attente AAABBBCCC

imprime une nouvelle file d'attente état AABBBCCCAAA

imprime un nouvel état de file d'attente ABBBCCCAAAAAA

imprime un nouveau état de file d'attente BBBCCCAAAAAAAAA

Ce fut ma première interprétation du cycle, mais je ne dois pas être mal, parce que je vais de 1 répéter à 3 tout de suite.

Mise à jour: définitivement lu le problème initial mal après avoir vu les autres réponses.

Questions connexes