黑马程序员技术交流社区

标题: 魔术师的猜牌术(闲来无事 做的一道题 觉得挺有意思 大家... [打印本页]

作者: 小歪    时间: 2014-3-16 21:32
标题: 魔术师的猜牌术(闲来无事 做的一道题 觉得挺有意思 大家...
本帖最后由 小歪 于 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();
        }
}

运行结果:







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2