您的位置:首页 > 编程语言

(百例编程)69.魔术师的猜牌术(1)

2012-06-10 16:14 597 查看
题目:魔术师利用一副牌中的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: