我想使用python解决此问题:


  以数字顺序将数字1,2,3取至9,然后加上一个加号
  数字之间的符号或减号,或两者均不等于
  总计为100。例如,一种实现方法是:1 + 2 + 34
  -5 + 67-8 + 9 = 100,使用了六个加减。您需要做的最少的正负次数是多少?


我考虑过从生成有效的元组开始,例如(1,2,34,567,89),然后算出哪些加起来等于100,然后找出最短的那个。

为此,我首先创建了可能的数字列表(数十和数百),因为我敢肯定没有4位数字的组合。

strnumbers = [str(x) for x in range(1,10)]
digits = [int(i) for i in strnumbers]
tens = [int(strnumbers[a] + strnumbers[a+1]) for a in range(8)]
hundreds = [int(strnumbers[a] + strnumbers[a+1] + strnumbers[a+2]) for a in range(7)]


但是,我不确定如何创建实际的可能列表。

我的问题有两个:


您将如何使用十位数和百位数来创建可能的元组?
就计算而言,这是否合理?感觉就像我在做很多额外的工作

最佳答案

import itertools

results = []
for opers in itertools.product(('-','+',''),repeat=8):
    expression = '1{}2{}3{}4{}5{}6{}7{}8{}9'.format(*opers)
    result = eval(expression)
    if result == 100:
        results.append(expression)
best_result = min(results, key=len)
print(best_result, len(best_result)-9)

10-07 18:24