我想使用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)