《啊哈算法》纸盘游戏-小猫钓鱼-js版

结论

我的输出结果和书上不一致,在网上查了下,有的人士和我的结果一样,我把每一步都打印出来并看了结果,我的过程和结果是没问题的。

游戏规则

将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人 手中的牌全部出完时,游戏结束,对手获胜。

谁先没牌谁输;

依次放到自己的手中;即从最后的牌开始拿,比如 1、3、5、1,则拿回去的顺序是倒的,即:1、5、3、1 放到自己的牌的最后。

coding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
let man = [2, 4, 1, 2, 5, 6];
let woman = [3, 1, 3, 5, 6, 4];
let dest = [];
console.log(man);
console.log(woman);
while (man.length > 0 && woman.length > 0) {
let m = man.shift();
let w = woman.shift();
let isMan = false;
let isWoman = false;
console.log("dest", dest);
console.log("man", m);
console.log("manArr", man);
console.log("woman", w);
console.log("womanArr", woman);
console.log("*******************************8");
for (let i = 0; i < dest.length; i++) {
if (m === dest[i]) {
isMan = true;
break;
}
} // for
if (isMan) {
man.push(m);
while (dest.length > 0) {
let cur = dest.pop();
man.push(cur);
if (cur === m) {
break;
}
}
} else {
dest.push(m);
}
for (let i = 0; i < dest.length; i++) {
if (w === dest[i]) {
isWoman = true;
break;
}
} // for
if (isWoman) {
woman.push(w);
while (dest.length > 0) {
let cur = dest.pop();
woman.push(cur);
if (cur === w) {
break;
}
}
} else {
dest.push(w);
}
} // while
console.log("dest", dest);
console.log("man", man);
console.log("woman", woman);
console.log("%s赢了", woman.length === 0 ? "男" : "女");

结果

1
2
3
4
dest [ 3, 4, 5, 6, 2, 1 ]
man []
woman [ 6, 5, 2, 3, 4, 1 ]
女赢了

注意

刚开始里面用 for 循环来做,但是 for 循环会有很多坑。另外切记不要把循环中的判断放到一个循环中。
都是细节问题,这个需要自己手动写去看,其实并不难。

文章作者: wenmu
文章链接: http://blog.wangpengpeng.site/2020/02/28/%E5%95%8A%E5%93%88%E7%AE%97%E6%B3%95-%E7%BA%B8%E7%9B%98%E6%B8%B8%E6%88%8F-%E5%B0%8F%E7%8C%AB%E9%92%93%E9%B1%BC-js%E7%89%88/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 温木的博客
微信打赏