魔术师利用一副牌中的13张黑桃,预先将它们排好后迭在一起,牌面朝下。对观众说:我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?你们就看。魔术师将最上面的那张牌数为1,把它翻过来正好是黑桃A,将黑桃A放在桌子上,然后按顺序从上到下数手上的余牌,第二次数1、2,将第一张牌放在这迭牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上,第三次数1、2、3,将前面两张依次放在这迭牌的下面,再翻第三张牌正好是黑桃3。这样依次进行将13张牌全翻出来,准确无误。问魔术师手中的牌原始顺序是怎样安排的?
主要思路:
1.判断下标过了12后的情况.
2.判断下标没有过12的情况.
3.只要按顺序输入A,1,2,3,4,5.................最后会按魔法师的顺序排列
main()
{
int result=0,=0,m=0;
for(13张牌) /*m<=12*/
for(n=0;n==m;n++)
if(n==m) /*费话来的,但为了程序可观性*/
{
if(result>12) /*当顺序超过了,数组下标从0开始,最后一个是12*/
{
result=result-12;
for(q=0;q if(a[q]!=0)
有牌++;
result+=有牌; /*这样可以跳过已经有值的下标*/
a[result]=getchar();
有牌=0; /*复位,为下次准备*/
getchar();/*接收回车*/
}
else
{
result=x+n; /*判断数组还没过下标12时,计算如果有值已赋*/
for(;x if(a[x]!=0) 有牌++;
result+=有牌;
a[result]=getchar();
x=n;
有牌=0;
}
}
最后顺序打印由下标从0开始到12;
}
阅读(1260) | 评论(2) | 转发(0) |