有没有更好的方法来使用数字 1 到 10 生成所有相等的算术序列?
Is there a better way to generate all equal arithmetic sequences using numbers 1 to 10?
问题:
The numbers from 1 to 10 are given. Put the equal sign(somewhere between
them) and any arithmetic operator {+ - * /} so that a perfect integer
equality is obtained(both the final result and the partial results must be
integer)
示例:
1*2*3*4*5/6+7=8+9+10
1*2*3*4*5/6+7-8=9+10
我解决这个问题的第一个想法是使用回溯:
- 生成将运算符放在数字之间的所有可能性
- 对于这样一种可能性,用等号一个接一个地替换所有运算符,并检查我们是否有两个相等的结果
但是这个解决方案需要很多时间。
所以,我的问题是:是否有更快的解决方案,也许是使用运算符属性或其他一些很酷的数学技巧的解决方案?
我将从等号开始。选择一个可能的位置,然后在那里拆分你的序列。对于左侧和右侧,分别找到所有可能的结果,并将它们存储在字典中。稍后再匹配它们。
找到所有 226 个解决方案花费了我的 Python 程序,基于这种方法,不到 0.15 秒。所以肯定不需要进一步优化,是吗?一路上,我为一个方程的单边计算了总共 20683 个子表达式。它们相当平衡:左侧有 10327 个表达式,右侧有 10356 个表达式。
如果你想更聪明一点,你可以尝试减少甚至尝试除法的地方。为了分配无余数除法,除数的质因数必须包含在被除数的质因数中。因此,股息必须是某种产品,并且该产品必须包含您除以的数字因子。 2、3、5 和 7 是质数,因此它们永远不可能是这样的约数。 4 前面永远不会有两个偶数。所以唯一可能的方式是 2*3*4*5/6
、4*5*6*7/8
和 3*4*5*6*7*8/9
。但我想说的是,检查给定的除法是否可行要容易得多,不需要任何聪明。
问题:
The numbers from 1 to 10 are given. Put the equal sign(somewhere between them) and any arithmetic operator {+ - * /} so that a perfect integer equality is obtained(both the final result and the partial results must be integer)
示例:
1*2*3*4*5/6+7=8+9+10
1*2*3*4*5/6+7-8=9+10
我解决这个问题的第一个想法是使用回溯:
- 生成将运算符放在数字之间的所有可能性
- 对于这样一种可能性,用等号一个接一个地替换所有运算符,并检查我们是否有两个相等的结果
但是这个解决方案需要很多时间。
所以,我的问题是:是否有更快的解决方案,也许是使用运算符属性或其他一些很酷的数学技巧的解决方案?
我将从等号开始。选择一个可能的位置,然后在那里拆分你的序列。对于左侧和右侧,分别找到所有可能的结果,并将它们存储在字典中。稍后再匹配它们。
找到所有 226 个解决方案花费了我的 Python 程序,基于这种方法,不到 0.15 秒。所以肯定不需要进一步优化,是吗?一路上,我为一个方程的单边计算了总共 20683 个子表达式。它们相当平衡:左侧有 10327 个表达式,右侧有 10356 个表达式。
如果你想更聪明一点,你可以尝试减少甚至尝试除法的地方。为了分配无余数除法,除数的质因数必须包含在被除数的质因数中。因此,股息必须是某种产品,并且该产品必须包含您除以的数字因子。 2、3、5 和 7 是质数,因此它们永远不可能是这样的约数。 4 前面永远不会有两个偶数。所以唯一可能的方式是 2*3*4*5/6
、4*5*6*7/8
和 3*4*5*6*7*8/9
。但我想说的是,检查给定的除法是否可行要容易得多,不需要任何聪明。