【发布时间】:2017-07-03 23:18:12
【问题描述】:
我想用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)]
但是,我不确定如何创建实际可能的列表。
我的问题有两个:
您将如何使用十位和百位数字创建可能的元组?
就计算而言,这是一种合理的方法吗?感觉我在创造很多额外的工作
【问题讨论】:
-
这些问题太多了。一个好主意是看看
itertools和itertools.product -
你有没有想过使用
eval?这样,您可以创建一个字符串并插入运算符,而不是生成数字列表。 -
@yinnonsanders 好的,这会减少上面的列表,但是如何创建解决方案?
-
@Ev.Kounis 如果我删除问题的第 2 部分,那还不错吧?我看过 itertools,但没有什么特别合适的 - 我需要做一个笛卡尔积,然后过滤掉任何重复的数字
-
假设您使用
eval,问题就简化为创建以下形式的字符串:"1 op1 2 op2 3 op3 4 op4 5 op5 6 op6 7 op7 8 op8 9" 其中 opN 代表 @ 987654326@、+或空字符串。这个问题确实可以通过itertools.product解决。
标签: python permutation