(百例编程)70.魔术师猜纸牌(2)

题目:魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:最上面一张是黑桃A,翻开后放在桌上。以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3。如此下去,观众看到放在桌子上牌的顺序是:黑桃 A 2 3 4 5 6 7 8 9 10 J Q K红桃 A 2 3 4 5 6 7 8 9 10 J Q K问魔术师手中牌的原始顺序是什么?

//题目:魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:
/*最上面一张是黑桃A,翻开后放在桌上。以后,从上至下每数两张全依次放在最底下,第
三张给观众看,便是黑桃2,放在桌上后再数两张依次放在最底下,第三张给观众看,是
黑桃3。如此下去,观众看到放在桌子上牌的顺序是:
黑桃 A 2 3 4 5 6 7 8 9 10 J Q K
红桃 A 2 3 4 5 6 7 8 9 10 J Q K
问魔术师手中牌的原始顺序是什么?*/

//BY as1138 2011-10-17

#include <iostream>
#include <queue>
using namespace std;

int main(void)
{
	queue<int> iQue;
	int len=0;
	int iRes[26];
	int i =0;
	int tem;
	while(i!=26)
	{
        iQue.push(i++);
	}
	
	for (int j=1;j!=27;++j)
	{
		tem = iQue.front();
		iQue.pop();
        iRes[tem] = j;
      if (j != 26)
      {
		  tem = iQue.front();
		  iQue.pop();
		  iQue.push(tem);

		  tem = iQue.front();
		  iQue.pop();
		  iQue.push(tem);
      }
	}

	for (int k=0;k!=26;++k)
	{
		if(iRes[k]>13)
			cout<<"红:"<<iRes[k]-13<<" ";
		else
			cout<<"黑:"<<iRes[k]<<" ";
	}
	cout<<endl;
	return 0;
}
    原文作者:魔术师发牌问题
    原文地址: https://blog.csdn.net/csy981848153/article/details/7650143
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞