一个24点的算法
- 首先想到的是找规律,比如3*8=24,4*6=24,然后向这几个数来凑。但是想这个规则就有些复杂了。优化一下,比如按我教女儿的方法,先随机找一个数,假定它不动,比如3,然后列出可生成24的补数,比如,8、27、42,然后把问题变成用3个数求上面的补数,再递归一下,如果找不到有效数,就再用加减乘除先对两个数操作,生成一个数,列出这个数可求24的补数,把问题变成用另外两个数算出补数。想想有点复杂了。
- 在网上找了一下,大多数思路都是穷举,穷举就穷举吧,反正数也不多
上面的代码由Python写成,里面涉及到了一个系统的库itertools,用于高效循环的迭代函数集合。上面涉及到一个函数为combinations_with_replacement,combinations的意思就是数学上的“组合”,所以这个过程其实是不带顺序的排列。而上面是指允许重复地使用相同的数。