回想一下平时24点是怎么玩的。不管最终的策略是什么,都是要先选两张牌做运算,算出一个数值,然后和剩下的两张牌一起考虑。于是接下来就等于三张牌算24点。OK,递归的思路就这么出来了。所以,那些乘除法、括号的优先结合法则,都是障眼法,其实都不需要考虑。
总结一下:手头有N张牌的时候(K<=4),要随机选出两张(有序),剩下的就不用管顺序了。这样的排列组成了一个排列的集合vector<vector<double>>permuations
。对于其中的每一种排列,我们对于那两张有序的牌分别做加减乘除的运算,将得到的结果再放回剩下的N-2张牌里面,相当于变成N-1张牌.于是我们发现这是一个递归任务,我们下一步就是在N-1牌里算24点,同样需要先随机挑两张,重复上面的步骤。手头的牌只有一张了,那查看它是否为24即可。
需要注意,所有的牌必须处理成浮点,因为涉及到除法。