A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小歪 于 2014-3-16 21:36 编辑

/*
魔术师的猜牌术

魔术师再次表演,他将红桃和黑桃全部迭在一起,牌面朝下放在手中,对观众说:
最上面一张是黑桃A,翻开后放在桌上。
以后,从上至下每数两张全依次放在最底下,第三张给观众看,便是黑桃2,
放在桌上后再数两张依次放在最底下,第三张给观众看,是黑桃3。
如此下去,观众看到放在桌子上牌的顺序是:

黑桃 A 2 3 4 5 6 7 8 9 10 J Q K
红桃 A 2 3 4 5 6 7 8 9 10 J Q K

问魔术师手中牌的原始顺序是什么?

*/

/*
  **问题分析与算法设计**
  *
       按照倒推的方法,得到原来魔术师手中的牌的顺序。
*/
public class TestJava{
        public static int a[]=new int[27];
        
        public static void main(String args[] )
        {
                int i,n,j=1;
                 a[1]=1;                //初始化第一张牌
        System.out.printf("The original order of cards is:\n");
        for(i=2;i<=26;i++)
        {
                n=1;
                do{
                        if(j>26) j=1;                //超过最后一个元素则指向1号元素
                        if(a[j]!=0) j++;                //跳过非空的盒子,不进行计数
                        else{
                                if(n==3) a[j]=i;                //若数到第3个空盒子,则将牌放入空盒中
                                j++; n++;                //对空盒计数,数组下标指向下一个盒子
                        }
                }while(n<=3);                //控制空盒计数为3
        }
        for(i=1;i<=26;i++)                //输出牌的排列顺序
        {
               System.out.printf("%c",a>13? '\3':'\6');
                System.out.printf("%d ",a>13?a-13:a);
                if(i==13) System.out.println();
        }
        
System.out.println();
        }
}

运行结果:


评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马