s****m 发帖数: 160 | 1 不知道以前有没有人贴过。
算24就是4个数字用+-x/组合算出24。我觉得除了穷举以外,没有
什么特别好的算法。
我想的是:
- 列出所有4个数字的组合
- 定义一个递归函数get_string(int expected, int[] numbers)
例如expected=24, numbers = [1, 2, 3, 4], 则返回
"1*2*3*4".
- 对每一种组合,取出第一个数字k,然后调用
get_string(24-k, numbers[1-3])
get_string(24+k, numbers[1-3])
...
如果返回非空的话,就结束输出结果。
- 如果需要进一步优化的话,就用Dynamic Programming存放
get_string的中间值。
还有简单的解法么? | p***o 发帖数: 1252 | 2 no more than 4!*4^3*3! < 10000 cases, brute force is more than enough.
【在 s****m 的大作中提到】 : 不知道以前有没有人贴过。 : 算24就是4个数字用+-x/组合算出24。我觉得除了穷举以外,没有 : 什么特别好的算法。 : 我想的是: : - 列出所有4个数字的组合 : - 定义一个递归函数get_string(int expected, int[] numbers) : 例如expected=24, numbers = [1, 2, 3, 4], 则返回 : "1*2*3*4". : - 对每一种组合,取出第一个数字k,然后调用 : get_string(24-k, numbers[1-3])
| k****f 发帖数: 3794 | 3 用逆波兰表达式
枚举起来方便一些。
【在 s****m 的大作中提到】 : 不知道以前有没有人贴过。 : 算24就是4个数字用+-x/组合算出24。我觉得除了穷举以外,没有 : 什么特别好的算法。 : 我想的是: : - 列出所有4个数字的组合 : - 定义一个递归函数get_string(int expected, int[] numbers) : 例如expected=24, numbers = [1, 2, 3, 4], 则返回 : "1*2*3*4". : - 对每一种组合,取出第一个数字k,然后调用 : get_string(24-k, numbers[1-3])
| a***f 发帖数: 45 | |
|