Chinaunix首页 | 论坛 | 博客
  • 博客访问: 325268
  • 博文数量: 106
  • 博客积分: 3081
  • 博客等级: 中校
  • 技术积分: 1090
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-15 14:07
文章分类

全部博文(106)

文章存档

2009年(1)

2007年(34)

2006年(71)

我的朋友

分类: C/C++

2006-04-06 07:55:35

魔术师利用一副牌中的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;



}

 
 
 
阅读(1237) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~