老小的时候就玩这个 24点扑克游戏. 说来很简单 就是随机抽取4张扑克牌(除掉大小王), 然后需要以最快的速度用这4张牌 加减乘除 来得到 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 个汉字, 你数一下对不对.loading...
上一篇: 你是不是浪费太多的时间?
下一篇: 加入 Zeek 开始省钱
扫描二维码,分享本文到微信朋友圈