算法 - 通过4位数的表达式表示某个整数

时间:2013-09-05 21:58:42

标签: algorithm expression

这是我的问题: “我给你4个数字1,2,3,4。我希望你用这四个数字来创建数字1,2,3等的数学表达式。获胜者将是产生最长范围的条目您可以使用数学符号+ - * /。此外,允许使用括号和平方根。请注意,您可以将数字并排放置以形成2位或3位数字。例如:

1 = ( 3/1 ) - ( 4/ 2 )

2 = ( 2 * 3 ) – ( 4/1)

3 = 21 / ( 3 + 4 )

4 = "

所以我需要一个算法:

    `Input: an integer`

    `Output: an expression formed by digits 1,2,3,4`

现在我只能想到强力算法:

First try the expression which formed by only one-digit number. In this expression, try all 4 operators +,-,*,/ in every possible position. Then try to put more bracket.

Then try try the expression which formed by two-digit number and two one digit number...

但是实现这个算法很难,因为我无法想到所有的情况。

有人有更好的想法吗?

2 个答案:

答案 0 :(得分:1)

表达式是否包含多次出现的数字?

如果帽子没问题,你只需要编号为1到4的表达式。你可以通过在其中一个基本表达式中重复添加4来计算每隔一个自然数。

如果数字必须恰好出现一次,则忽略括号和平方根。 那么你最多有7个槽的表达式:4个数字(并列数字形成一个数字)和最多3个(Infix)运算符。这应该适用于穷举搜索。

具有7个插槽的表达式的示例计数:

(7选4)* 4! *(4选3)* 3!

7个中的4个位置,在这些位置上置换4个数字,从4个操作符中选择3个,对其序列进行置换。

括号最多可添加6个插槽:每个操作符最多1对(否则您的表达式在语法上不正确)。

平方根可以位于由数字占据的任何槽的前面,在开口括号的前面和另一个方根的前面。请注意,由于每个数字只能出现一次,因此可以表示没有平方根的最大数字是有界的。由于根收缩任何数字> 1,迭代的平方根应用程序的最大数量也是有限的(我认为最多4个)

答案 1 :(得分:0)

从数字的求解器开始,例如来自Rosetta Code的these - 您可能希望使目标成为变量,而不是固定的24个程序。然后,您需要通过连接(或不连接)输入数字生成所有可能的数字集,并在解算器中查找这些数字。

更好的是,如果你以Python解算器为例,它将根据输入数生成方程,并评估它们寻找给定的目标。您可以存储由方程式生成的任何整数的集合(而不是生成它们的方程式,然后在末尾排序并从1中提取最长的序列,而不是寻找特定目标。保证从1开始给出最长的序列