老小的时候就玩这个 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
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK