筆記試験問題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;
}