c++实现洗牌

输入描述:
第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。




输出描述:
对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。


输入例子1:
3
3 1
1 2 3 4 5 6
3 2
1 2 3 4 5 6
2 2
1 1 1 1


输出例子1:
1 4 2 5 3 6

1 5 4 3 2 6


该代码实现了一次性连续输入多组纸牌顺序,最后一次性把每个组洗牌结果输出 。而不是输入一组纸牌,立马输出洗牌后的结果。关键是用到了vector再二维数组的使用。

#include 
#include 
using namespace std;
int main()
{
	void ShuffleCards(vector&cardArray,int k,vector >&outArray,int &t);
	int T,x;
	cin>>T;
	vector xArray;
	int n,k;

	vector >outArray(T);//定义T行的二维数组,不同行可以不等长
	int t=0;
	while (T--)
	{
		cin>>n>>k;
		vector cardArray(2*n);//一组牌
		for (int i=0;i<2*n;i++)
			cin>>cardArray[i];
		ShuffleCards(cardArray,k,outArray,t);
		t++;
	}
	for (int outi=0;outi::const_iterator p=outArray[outi].begin();p!=outArray[outi].end();p++)
		{
			if (p==outArray[outi].end()-1)
				cout<<*p;
			else
				cout<<*p<<" ";
		}
		if (outi&cardArray,int k,vector >&outArray,int&t)
{
	int len=cardArray.size();
	vectora(len);
	while (k--)
	{
		for (int j=len-1,i=len/2;j>0;j=j-2,i--)
		{
			a[j]=cardArray[i+len/2-1];
			a[j-1]=cardArray[i-1];

		}
		for (int j=0;j


转载于:https://www.cnblogs.com/fushuixin/p/7413206.html

你可能感兴趣的:(c++实现洗牌)