我真的无法弄清楚从哪里开始

时间:2015-10-07 02:55:50

标签: c algorithm math

通过使用1到9的9个数字,你应该找到使用乘法和加法得到N的方法的数量。

例如,如果给出100,则回答7。

原因是有7种可能的方法。

100 = 1*2*3*4+5+6+7*8+9

100 = 1*2*3+4+5+6+7+8*9

100 = 1+2+3+4+5+6+7+8*9

100 = 12+3*4+5+6+7*8+9

100 = 1+2*3+4+5+67+8+9

100 = 1*2+34+5+6*7+8+9

100 = 12+34+5*6+7+8+9

如果给你这个问题,你会如何开始?

2 个答案:

答案 0 :(得分:1)

有三种可能的操作

  addition
  multiplication
  combine, for example combine 1 and 2 to make 12

每个运营商有8个职位。因此,总共有3 ^ 8 = 6561个可能的方程。 我将从

开始
for ( i = 0; i < 6561; i++ )

答案 1 :(得分:1)

我们可以使用括号吗?这将大大增加可能性的数量。

我会尝试找到第一个附加项,首先说1×23。这些数量有限,而且由于我们无法减去,我们知道如果我们得到一个高于目标的项,我们可以从搜索中删除它。这让我们寻找23 + f = 100的解决方案,其中 f 是完全相同形式的另一个公式。但这与解决数字4-9和目标77的原始问题完全相同!因此,递归调用您的算法并将该子问题的解决方案添加到原始问题的解决方案中。也就是说,如果我们有23 + 4,那么子问题是否有任何解决方案,数字5-9和 n = 73?分而治之。

您可能会受益于部分解决方案的动态表,因为您可能会以不同的方式获得相同的子问题:1 + 2 + 3 = 1×2×3,因此使用数字4-9和目标解决子问题94次重复工作。

根据最受约束的原则,你可能从右到左比从左到右更好。 89,8×9或78 + 9比1 + 2 + 3,1×2×3,12×3,12 + 3或1×23的可能解决方案留下更少的空间。