筆記試験問題33——二列で全配列接合問題を解決する
1396 ワード
タイトルの説明:5つの歌唱単があって、番号はそれぞれA、B、C、D、Eで、それぞれの歌唱単は3首の異なっている歌があります.いくつかのリスト名を入力すると、各リストに1曲がプレイリストに出力され、条件を満たすすべてのプレイリストが出力されます.入力記述:重複しないA-Eのみを含む文字列出力記述を入力:条件を満たすすべてのプレイリストを出力(出力は秩序が必要で、アルファベットは大文字でなければならない)入力:AC出力:A 1 C 1 A 2 C 3 A 2 C 1 A 2 C 2 A 2 C 3 A 2 C 3 A 3 C 3構想:2つのキューq 1,q 2を設定し、最初のアルファベットを遍歴し、つなぎ合わせた文字列をq 1に格納する;次のアルファベットを巡るとき、q 1から文字列を取り出し、数字をつなぎ合わせてq 2に入れる.最後に、q 1を取り出した後、q 2の文字列をq 1に格納する.次に、次のアルファベットを巡回して、終了するまで同じ操作を行います.コアコードは次のとおりです.
#include
#include
#include
#include
#include
using namespace std;
int main() {
string str;
cin >> str;
queue q1;
queue q2;
for (int i = 0; i < str.size(); i++) {
if (q1.empty()) {
for (int j = 1; j <= 3; j++) {
string s;
s += str[i];
s += (j + '0'); //ss += to_string(j);
q1.push(s);
}
}
else {
while (!q1.empty()) {
for (int j = 1; j <= 3; j++) {
string s = q1.front();
s += str[i];
s += (j + '0'); //ss += to_string(j);
q2.push(s);
}
q1.pop();
}
}
while (!q2.empty()) {
q1.push(q2.front());
q2.pop();
}
}
while (!q1.empty()) {
cout << q1.front();
q1.pop();
if (q1.empty())
cout << endl;
else
cout << " ";
}
return 0;
}