-
快速排序-(POJ)用队列对扑克牌排序
题目链接:用队列对扑克牌排序
-
思路
按题目要求是按花色递增(A,B,C,D),花色相同按点数递增
那么先对点数相同的进行归类,定义9个队列保存结果
再对花色归类,定义4个队列保存结果
-
代码
#include<iostream>
#include<queue>
using namespace std;
struct Puko
{
char Follower_color;
int Key;
};
int main()
{
int Card_Num;
char Poke_card[5];
Puko One_Puko;
queue<Puko> Store_Key[10]; //第一次点数排序存放队列
queue<Puko> Store_color[4]; //第二次花色排序存放队列
cin >> Card_Num;
for (int i = 1; i <= Card_Num; i++)
{
cin >> Poke_card;
One_Puko.Follower_color = Poke_card[0];
One_Puko.Key = Poke_card[1] - '0';
Store_Key[One_Puko.Key].push(One_Puko); //按点数入队
}
for (int i = 1; i <= 9; i++)
{
cout << "Queue" << i << ":";
while(!Store_Key[i].empty())
{
One_Puko = Store_Key[i].front();
Store_color[One_Puko.Follower_color - 'A'].push(One_Puko); //按花色入队 0 1 2 3
cout << One_Puko.Follower_color << One_Puko.Key << " ";
Store_Key[i].pop();
}
cout << endl;
}
for (int i = 0; i < 4; i++)
{
cout << "Queue" << (char)('A' + i) << ":";
while(!Store_color[i].empty())
{
One_Puko = Store_color[i].front();
Store_Key[9].push(One_Puko); //用9号栈存放排序结果
cout << One_Puko.Follower_color << One_Puko.Key << " ";
Store_color[i].pop();
}
cout << endl;
}
while(!Store_Key[9].empty())
{
One_Puko = Store_Key[9].front();
cout << One_Puko.Follower_color << One_Puko.Key << " ";
Store_Key[9].pop();
}
cout << endl;
return 0;
}
-
二哈送自己
刚开始受题目提示的启发(误导),打算重复利用队列,排花色的时候重复利用排点数的队列,这样会出现一种情况,相应的点数队列还没出队就入了花色然后就一片乱,所以多定义几个队列比较清晰。