Java 魔术师发牌
2016-11-26 本文已影响124人
英勇青铜5
前天学习数据结构的时候,在循环链表
时,案例是魔术师发牌
,看到用C
实现,用到了指针
,今天无聊的时候,就用Java
实现一下,感觉Java
要比C
实现起来容易些
规则:一个花色的从A
到K
13张牌,例如,♥️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]