Algorithm 从子集中获取数字

Algorithm 从子集中获取数字,algorithm,Algorithm,我在一次采访中被问到: 您有一个十进制数字的子集D,[0-9]和一个计算器,其中包含允许的数学运算的子集O,O c{+,-,*,/} 给定一个从0到999的数字,是否可以使用子集数字和计算器生成此数字。 例如,给定D={1,3,4,5}和O={*,-},要得到129,您可以这样做:35*4-11 要求使用最后可能的数字和操作组合 编辑: 我正在重写规范,以防我的原始帖子不是cealr 根据上述描述,问题可分为以下几点: 投入: 一组非空数字D⊆ {0,1,2,3,4,5,6,7,8,9} 一组数

我在一次采访中被问到:
您有一个十进制数字的子集
D
[0-9]
和一个计算器,其中包含允许的数学运算的子集
O
O c{+,-,*,/}

给定一个从0到999的数字,是否可以使用子集数字和计算器生成此数字。
例如,给定
D={1,3,4,5}
O={*,-}
,要得到
129
,您可以这样做:
35*4-11

要求使用最后可能的数字和操作组合

编辑: 我正在重写规范,以防我的原始帖子不是cealr 根据上述描述,问题可分为以下几点:

投入: 一组非空数字
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
  • 计算器可以返回0-999范围内的结果
  • Target必须使用尽可能少的“键盘点击”生成,这包括所用数字的长度(999=3次点击)以及操作(每次操作1次点击)
因此,也可以使用(例如)
1111-1-1-1-1-1-1-1-…
生成上述示例中的129,但这将使用比35*4-11更多的键盘点击


完整问题中还有其他一些琐碎的限制,但我试图在这里总结算法部分

你讲述了一个有趣的轶事,但没有提出任何问题。是否允许使用括号?假设子集必须是非空的…@twalberg如果其中至少有一个是空的,我们无法生成任何数字,很明显,即使O是空的,我们仍然可以生成由任意数字组合组成的数字…dd。。。在D中,如果我们要正式,不妨彻底:)你讲述了一个有趣的轶事,但没有提出任何问题。是否允许使用括号?假设子集必须是非空的…@twalberg如果其中至少有一个是空的,我们无法生成任何数字,很明显,即使O是空的,我们仍然可以生成由任意数字组合组成的数字…dd。。。在D中,如果我们要正式,还不如彻底:)