5.7 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Counting Cards | 计数卡 |
如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序
并编写自己的代码
问题说明:
在赌场游戏Blackjack中 ,玩家可以通过跟踪牌组中剩余的高牌和低牌的相对数量来获得优势。这称为卡片计数。
在牌组中剩下更多高牌有利于玩家。根据下表为每张卡分配一个值。当计数为正数时,玩家应该下注。当计数为零或负数时,玩家应该下注低。
价值|牌
----- | :-------------------:
+1 | 2,3,4,5,6
0 | 7,8,9
-1 | 10,'J','Q','K','A'
你会写一个卡计数功能。它将接收一个卡参数,并根据卡的值递增或递减全局计数变量(参见表格)。然后,该函数将返回一个包含当前计数的字符串,如果计数为正则返回字符串Bet ,如果计数为零或为负,则返回Hold 。当前计数和玩家的决定( Bet或Hold )应该由一个空格分隔。
- 更改下面的代码
// Only change code below this line,最多为// Only change code above this line - 确保您正在编辑
cc函数的内部。 - 使用您学到的知识来检查传递给函数的每个卡参数的值。
- 保持该数字的运行计数。
- 如果最终计数为1或更大,则返回**#Hold** 。
- 如果最终计数为0或更少,则返回**#Bet** 。
示例输出:
- -3保持
- 5投注
提示:1
使用switch (或else if )语句计算每张卡的值。
现在尝试解决问题
提示:2
将每张卡的值加/减到变量计数 。如果卡值为0,请不要做任何事情。
现在尝试解决问题
提示:3
在计算卡片后,使用if语句检查计数值 。另外,请确保您的return在数字和字符串之间有空格。
现在尝试解决问题
扰流警报!
提前解决!
基本代码解决方案
function cc(card) {
// Only change code below this line
switch(card){
case 2:
case 3:
case 4:
case 5:
case 6:
count++;
break;
case 10:
case "J":
case "Q":
case "K":
case "A":
count--;
break;
}
if (count > 0){
return count + " Bet";
} else {
return count + " Hold";
}
// Only change code above this line
}
代码说明:
- 通过
switch语句检查每张卡的值。 - 变量计数 :
- 如果卡是2,3,4,5或6,则增加1。
- 由于7,8和9不值得,我们在
switch语句中忽略了这些卡。 - 如果卡是10,'J','Q','K'或'A',则减1。
- 检查count的值并返回相应的响应。
示例运行
cc(2);运行。switch语句命中case 2,跳转并将变量count。- 然后
switch语句命中了break和cc(3);运行。 - 这个循环一直持续到最后的呼叫为止,
cc('A');。 - 在
switch语句之后,if语句检查count,现在为0。 - 然后这将下降到
else语句,该语句将返回0 Hold 。
注意 :如前所述, switch语句也可能是else if语句。
附加代码解决方案
function cc(card) {
// Only change code below this line
var regex = /[JQKA]/;
if (card > 1 && card < 7){count++;}
else if (card === 10 || String(card).match(regex)){count--;}
if (count > 0) return count + " Bet";
return count + " Hold";
// Only change code above this line
}
代码说明
·该功能首先评估if条件card是一个大于1且小于7 ,在这种情况下它递增count由一个。 ·然后,如果卡10或更高的IT递减count由一个。 ·变量regex是表示较高卡的值(字母)的正则表达式 。 · else语句使用|| (logical OR)检查这些值|| (logical OR)运算符;首先是10 ,然后是使用String.match()匹配正则表达式的任何字符串。
