题目:魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下。 对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信? 你们就看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在 桌子上,然后按顺序从上到下数手上的余牌,第二次数1、2,将第一张牌放在这迭牌的 下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前 面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3。这样依次进行将13张牌全 翻出来,准确无误。问魔术师手中的牌原始顺序是怎样安排的?
//题目:魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下。
/*对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?
你们就看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在
桌子上,然后按顺序从上到下数手上的余牌,第二次数1、2,将第一张牌放在这迭牌的
下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前
面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3。这样依次进行将13张牌全
翻出来,准确无误。问魔术师手中的牌原始顺序是怎样安排的?*/
//BY as1138 2011-10-16
#include <iostream>
#include <queue>
using namespace std;
int main(void)
{
queue<int> iQue;
int ite[13];
int len = 0;
int tem;
int tj;
for (int i=0;i!=13;++i)
{
iQue.push(i);
}
for (int j=1;j!=14;++j)
{
len = iQue.size();
tj = j;
if (j>len)
{
if(j%len == 0)
tj = len;
else
tj = j%len;
}
for(int n=1;n<tj;++n)
{
tem =iQue.front();
iQue.pop();
iQue.push(tem);
}
tem = iQue.front();
iQue.pop();
ite[tem] = j;
}
int m = 0;
while (m != 13)
cout<<ite[m++]<<" ";
cout<<endl;
return 0;
}