24点扑克游戏


老小的时候就玩这个 24点扑克游戏. 说来很简单 就是随机抽取4张扑克牌(除掉大小王), 然后需要以最快的速度用这4张牌 加减乘除 来得到 24的一个算式. 这需要脑子运算快, 是个很好的脑力训练.

poker 24点扑克游戏 折腾 数据结构与算法 有意思的 游戏

24 点扑克游戏

周末闲来无事, 刚好那天在电视上看到 花样少年 里明星也在玩. 于是就很快的写了这么一个程序. 当然提供免费 API 地址是 https://helloacm.com/api/24/





原理和代码

代码在 英文网页上: https://helloacm.com/24/

原理很简单, 就是暴力搜索. 才4个整数. 而且几种运算符而已. 注意加入了 pow 函数也就是可以有 a 的 b 次方. 整体来说4个数字只有两种方式. 就是 2个一组 即 (a, b), (c, d) 或者 ((a, b), c), d). 代码是用PHP实现的, 因为要提供API, 而且PHP里的数组很好用. 可以将值做为索引 (key). 这样就可以通过 array_key_exists(“=24”, $try1) 这样的方式来判断是否有结果为 24的算法.

最关键的可以通过 array_values(array_unique($rr)); 来去掉一些明显的重复. 关键代码如下:

// 返回 两数 A, B 可能的值数组 (value, how) 键值对.
  function tryA($a, $b, $aa, $bb) {
    $a = str_replace("=", "", $a);
    $b = str_replace("=", "", $b);
    $r = array();
    $r["=" . ($a + $b)] = "$aa + $bb"; 
    $r["=" . ($a - $b)] = "$aa - $bb";
    $r["=" . ($a * $b)] = "$aa * $bb";
    $r["=" . ($b - $a)] = "$bb - $aa";
    $r["=" . pow($a, $b)] = "pow($aa, $bb)";
    $r["=" . pow($b, $a)] = "pow($bb, $aa)";
    if ($a != 0) $r["=" . ($b / $a)] = "$bb / $aa";
    if ($b != 0) $r["=" . ($a / $b)] = "$aa / $bb";
    return $r;    
  }

计算机最厉害的就是重复的工作. 这点搜索对计算来说是小 case. 而且能把几乎所有的可能搜索出来(不排除程序可能有漏掉的)

07/06/2016 更新: 该功能集成到公众号里 欢迎关注 公众号 justyyuk

GD Star Rating
loading...
本文一共 401 个汉字, 你数一下对不对.
24点扑克游戏. (AMP 移动加速版本)
上一篇: 你是不是浪费太多的时间?
下一篇: 加入 Zeek 开始省钱

扫描二维码,分享本文到微信朋友圈
8fcfd7633506019fbfc1bc56bf5b391a 24点扑克游戏 折腾 数据结构与算法 有意思的 游戏

评论