美文网首页
Java 魔术师发牌

Java 魔术师发牌

作者: 英勇青铜5 | 来源:发表于2016-11-26 21:39 被阅读124次

    前天学习数据结构的时候,在循环链表时,案例是魔术师发牌,看到用C实现,用到了指针,今天无聊的时候,就用Java实现一下,感觉Java要比C实现起来容易些

    规则:一个花色的从AK13张牌,例如,♥️A♥️K。数1,翻开第一张是♥️A,放在桌子上,数1,2,将第一张牌放在剩余牌的最下面,翻开第二张,正好是♥️2,然后放到桌子上,依次类推,直到最后♥️K

    代码:

     class Poker {
        public static void main(String[] args) {
            add();
        }
    
        private static void add() {
            int[] pokers = new int[13];
            Position position = new Position();
            //第一张牌为A 这里用 1 表示
            pokers[0] = 1;
            //从 2 开始
            int currentPoker = 2;
            do {
                //移动的步数
                int moved = 0;
                //当前开始时,上一张牌所在位置
                int tempId = position.getPosition();
                while (moved < currentPoker) {
                    moved++;
                    tempId++;
                    //如果位置上已有牌,跳过去,不记步数
                    if (pokers[tempId % pokers.length] != 0) {  // 取模
                        moved--;
                    }
                }
                //记录当前牌的角标,下一张牌需要用
                position.setPosition(tempId);
                //设置当前牌
                pokers[tempId % pokers.length] = currentPoker;
                currentPoker++;
            } while (currentPoker < 14);
            System.out.print(Arrays.toString(pokers));
        }
    }
    
    /**
     * 记录牌的角标
     */
    class Position {
        private int position;
    
        public int getPosition() {
            return position;
        }
    
        public void setPosition(int position) {
            this.position = position;
        }
    }
    

    13张牌的顺序:

    [1, 8, 2, 5, 10, 3, 12, 11, 9, 4, 7, 6, 13]
    

    相关文章

      网友评论

          本文标题:Java 魔术师发牌

          本文链接:https://www.haomeiwen.com/subject/mxpgpttx.html