快速排序-(POJ)用队列对扑克牌排序

  • 快速排序-(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;
}
  • 二哈送自己

刚开始受题目提示的启发(误导),打算重复利用队列,排花色的时候重复利用排点数的队列,这样会出现一种情况,相应的点数队列还没出队就入了花色然后就一片乱,所以多定义几个队列比较清晰。

猜你喜欢

转载自blog.csdn.net/SZU_Crayon/article/details/81282318