Java 魔术师发牌

2016-11-26  本文已影响124人  英勇青铜5

前天学习数据结构的时候,在循环链表时,案例是魔术师发牌,看到用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]
上一篇下一篇

猜你喜欢

热点阅读