从子集中获取数字

时间:2016-12-20 16:05:22

标签: algorithm

我在接受采访时被问到这个问题:
您有一个小数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的运算符 您需要以最终获得数字目标

的方式使用计算器

限制

  • 计算器ACCEPTS NO PARENTHESIS,所有操作都是 按照出现的顺序进行,即1+2+3*4 = 3+3*4= 9*4 = 36
  • 计算器可以返回0-999
  • 范围内的结果 必须使用最少的键盘点击次数生成
  • 目标"可能,这包括所用数字的数字长度(999 = 3次点击)作为操作(每次操作是1次点击)

因此,上面例子中的129也可以使用(例如)1111-1-1-1-1-1-1-1-...生成但是使用键盘点击次数比35 * 4-11

更多

在完整的问题中还有其他一些微不足道的限制,但我试着总结一下这里的算法部分

0 个答案:

没有答案