Помогите мне понять этот алгоритм (простой) - PullRequest
2 голосов
/ 16 сентября 2011

Я только что создал класс очереди, и теперь мне нужно использовать его для этого.

Напишите программу на c ++ для генерации всех строк, используя буквы A, B и C.

Строки должны быть сгенерированы в следующем порядке: ABC AA AB AC BA BB BC CA CB CC AAA AAB AAC ABA ABB ABC ACA ACB ACC и т. Д.

Это должно выполняться до тех пор, пока моя очередь не переполнится.

Теперь я просто не понимаю алгоритм, предложенный учителем:

Начните с A, B и C в очереди.«Уберите его Покажите это, затем добавьте, добавьте, добавьте»

Функция добавления, добавления, добавления отбрасывает меня, как добиться получения этих букв в этом конкретном порядке?

Ответы [ 3 ]

7 голосов
/ 16 сентября 2011

Я думаю, что ваш учитель имел в виду "Добавить А, Добавить Б, Добавить С".

Предположим, у вас есть A, B и C в очереди. Вы вытаскиваете первую из очереди и распечатываете ее. Это должно напечатать A. Затем вы добавляете A к этому. Это дает вам АА, который вы возвращаете в очередь. Вы также добавляете B и добавляете C к строке, которую вы вставили последней (давая вам AB и AC), а также помещаете их обратно в очередь. Теперь ваша очередь содержит [B, C, AA, AB, AC]. Затем вы будете нажимать B и выполнять ту же последовательность операций над этим, и так далее, пока не исчерпаете место в вашем стеке.

4 голосов
/ 16 сентября 2011

Пусть наше поведение будет:

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

Наш поток будет выглядеть примерно так:

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

Если мы представим, что наша функция

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");
}

Получите этосейчас?

0 голосов
/ 16 сентября 2011

ABC

печатает новое состояние очереди BCAAA

печатает B новое состояние очереди CAAABBB

печатает C новое состояние очереди AAABBBCCC

печатает новую очередьstate AABBBCCCAAA

печатает Новое состояние очереди ABBBCCCAAAAAA

печатает Новое состояние очереди BBBCCCAAAAAAAAA

Это была моя первая интерпретация цикла, но я, должно быть, неправильно понял, потому чтоя сразу перехожу с 1 на 3.

Обновление: определенно неправильно прочитал исходную проблему после просмотра других ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...