昨天下午写了份作业:求出52张扑克牌所有4张牌组合,算出组合的24点解决方案
先说结果,一共有1820种组合, 这用到了高中的组合知识,分AAAA, AAAK, AA22, A234, AA23, 5种不同情况的分组。 具体可以百度到答案!
首先,写了个类, 求单个组合的24点解决算式。
1) 根据 4 张点 和 4种运算符, 递归求 合法的逆波兰式, 可将运算的元素存入list, 当满足cardCnt==4 && opCnt == 3 时, 检查此算式的结果。 并且在递归调用中,不得重复添加已经添加到list中的card, 运算符也只能在 cardCnt - opCnt >= 2 时添加, 否则不是合法的逆波兰式了。
2) 求逆波兰式的结果。很简单,用stack 就可以了。
然后,对1820种组合求解决方法。 算出458种没有解决方法(如果可以有小数的话)。 用整数计算我算的有474种没有解决方法
总结: 让姐姐我重新复习了下高中的排列组合 = = 用时大约4个小时写完。主要浪费在这还有纠结double还是int计算的问题。。。。
递归暴力省脑!!!!!注意循环里有递归时,参数状态的改变和恢复!!!!!!!!!!!!以后玩24点可以直接跑我程序了 = =