小赖子的英国生活和资讯

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

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version