不确定之前是否曾询问过这个问题,但未能详细说明此类问题。
这是子集sum和背包的变体。
虽然类似的问题appears to have been asked before,但逻辑不同足以保证一个新的线程。
参数: 给出总数以及整数列表。 整数可以以任意多种方式组合(例如1 2 3 = 12,3或1,23或1,2 3) 允许3个操作:
示例:
1 2 9 3 7 4 = 22
解决方案:
(129 - 3) / 7 + 4 = 22
这种运动有分类吗? (例如,子集和等)
一些想法:
创建包含所有可能数字组合的多维数组。 由于只允许3个运算符,因此该数组将包含3列/元素。
在第1,2或3点随机插入操作符并强制执行直至找到解决方案。
这远远不是一个优雅的解决方案 任何见解都将不胜感激。
我可能会用Perl编写代码,但任何语言的伪代码,指针或语法都会很棒。傲慢地嘲笑我缺乏数学资金也很酷;)
提前致谢!
答案 0 :(得分:1)
我刚刚回答了这个问题,但它被错误地迁移到了另一个stackexchange站点:https://codegolf.stackexchange.com/questions/3019/getting-an-answer-from-a-string-of-digits/3027#3027
这种运动有分类吗? (例如,子集和等)
我会称它为运算符+
,-
,*
,{{1}找到列表的所有二元运算符“缩减”,以任意顺序应用}和/
/ 10a+b
这是python中的暴力方法。在下面树木中的每个节点处,采用左侧和右侧可能性的笛卡尔积。对于每对,将所有运算符应用于它,以产生一组新的可能性。你必须小心不要做concat
;你可以通过创建数字对象解决这个问题。
下面是加泰罗尼亚数字的图示,其中每个节点都是运营商。操作次数大致为(1-2)3 = -13
。如果Catalan(#digits-1) * #operators^(#digits-1)
那么它应该只有大约十亿件事要尝试。
使用How to print all possible balanced parentheses for an expression?我们可以写:
#digits=10
答案 1 :(得分:0)
一种似乎运作良好的简单蛮力方法。
让我们使用RPN来避免括号。将输入拆分为单个数字,并尝试在数字之间插入运算符(无:空格和算术运算符),直到结果字符串求值为目标值。
javascript中的插图:http://jsfiddle.net/B5NdN/4。我只是从0循环到6 ^(输入长度)以获得所有可能的运算符组合,你的任务可能需要更复杂的东西,但原则仍然存在。