第五届蓝桥杯省赛C++A组 扑克序列

标题:扑克序列

A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。

请填写出所有符合要求的排列中,字典序最小的那个。

例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。

请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。

 

答案:2342A3A4

思路:拿全排列暴力的hhhhh

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include  
#include
using namespace std;

int num[8] = { 1,2,3,4,5,6,7,8 };
int find(int a)
{
	for (int i = 0; i < 8; i++)
	{
		if (num[i] == a)
			return i;
	}
	return -1;
}
int main()
{
	int a, b, i, flag;
	do
	{
		flag = 1;
		a = find(1);
		b = find(2);
		if (abs(a - b) != 2)
		{
			flag = 0;
			continue;
		}
		a = find(3);
		b = find(4);
		if (abs(a - b) != 3)
		{
			flag = 0;
			continue;
		}
		a = find(5);
		b = find(6);
		if (abs(a - b) != 4)
		{
			flag = 0;
			continue;
		}
		a = find(7);
		b = find(8);
		if (abs(a - b) != 5)
		{
			flag = 0;
			continue;
		}
		if (flag)
		{
			for (i = 0; i < 8; i++)
			{
				if (num[i] == 1 || num[i] == 2)
					cout << "A";
				else
					cout << (num[i] + 1) / 2;
			}
			cout << endl;
		}
	} while (next_permutation(num,num+8));
	return 0;
}

 

你可能感兴趣的:(蓝桥杯,全排列,全排列)