我刚刚创建了一个队列类,现在我必须使用它来完成这个操作。
写一个c++程序,生成所有使用a,B, c作为字母的字符串。
字符串必须按以下顺序生成:一个BCAAAB交流英航BB公元前CACBCCAAA艺术展AAC格式阿坝ABB美国广播公司ACAACBACC等。
它应该这样做,直到我的队列溢出。
现在,我就是不明白老师建议使用的算法,也就是这个。
从队列中的A、B和C开始。
这个add add add让我很困惑,它是怎么把这些字母按这个顺序排列的?
我想你老师的意思是"Add A, Add B, Add C"
假设队列中有A, B和C。您从队列中取出第一个并打印它。这个应该输出A,然后加一个A。这给了你AA,你把它推回队列。你还可以在你最后弹出的字符串中添加B和C(给你AB和AC),并将它们推回队列中。现在你的队列包含[B,C,AA,AB,AC]。接下来,您将弹出B并对其执行相同的操作序列,以此类推,直到堆栈中的空间用完为止。
让我们的行为成为:
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");
}
现在明白了吗?
A B C
打印新的队列状态B C A A A
打印B新的队列状态A A A B B B
打印C新的队列状态A A A B B B B C C C
打印新的队列状态A A B B B B C C C C A A A A
打印新的队列状态A B B B C C C A A A A A A A A
打印新的队列状态B B B C C C A A A A A A A A A A A A A A A A
这是我对循环的第一次解释,但我一定是弄错了,因为我马上从1重复到3。
更新:在看到其他回复后,肯定读错了最初的问题。