打卡3

问题描述:魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,并使牌面朝下。然后他对观众说:我不看牌,只要数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看,魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,他将黑桃A放在桌子上,然后按顺序从上到下数手中的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3,这样依次进行,将13张牌全部翻出来,准确无误。问魔术师手中的牌原始次序是怎样安排的?

流程图:

 

伪代码:

a[14]<-0

j=1

for i<-1 to 13            //i记为要翻的牌数

n=0

while n<i

j<-j%13            //j记为当前牌数

if j=0

j<-13

if a[j]=0

n++            //n记为翻的牌数

j++

a[j-1]=i

output a[1 to 13]

代码:

#include <iostream>

using namespace std;

int main()

{

int a[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};

int i,n,j=1;

for(i=1;i<=13;i++)

{

n=0;

for(;n<i;j++)

{

j=j%13;

if(j==0)

j=13;

if(a[j]==0)

n++;

}

a[j-1]=i;

}

for(i=1;i<=13;i++)

{

cout<<a[i]<<" ";

}

return 0;

}

 

posted @ 2023-05-24 21:05  umiQa  阅读(17)  评论(0编辑  收藏  举报