我在接受采访时被问到这个问题:
您有一个小数D
的子集[0-9]
和一个允许数学运算O
的子集O c {+,-,*,/}
的计算器。
给定0到999之间的数字,是否可以使用子集编号和计算器生成此数字
例如,给定D = {1,3,4,5}
和O = {*,-}
,要获得129
,您可以执行以下操作:35*4-11
要求使用最后一个可能的数字和操作组合
根据上面的描述,问题可以分解为:
一组非空数字D ⊆ {0,1,2,3,4,5,6,7,8,9}
一组数学运算符C ⊆ {+,-,*,/}
数字目标介于0到999之间
你有一个计算器,你可以从D传递任何数字并执行任何C的运算符 您需要以最终获得数字目标
的方式使用计算器1+2+3*4 = 3+3*4= 9*4 =
36
因此,上面例子中的129也可以使用(例如)1111-1-1-1-1-1-1-1-...
生成但是使用键盘点击次数比35 * 4-11
在完整的问题中还有其他一些微不足道的限制,但我试着总结一下这里的算法部分