生成添加到给定 int 的列表列表(Nim 游戏)

Generate a list of lists that add to a given int (game of Nim)

我是 Python/Computing 科学领域的新手 -(也是这个网站的新手)。我试图搜索这个但找不到如何去做。这是我必须完成的任务的一部分。 (尼姆游戏)。

基本上,我必须将一个给定的整数(例如:6)拆分成所有可以添加到它的可能组合,在列表列表中 - 但不是重复的。

因此,例如,对于 6,该函数将生成:[[1,5],[2,4]] 对于 10,它将生成:[[9,1],[8,2],[7,3],[6,4]]

(然后我会使用这些来 "dissect" 它们更多,使用二叉树,但我想我可以自己做 - 只需要这部分的帮助)

感谢您的宝贵时间和帮助!

简单示例:

n = 6
l = 0
r = n
lista = []
while l<=r:
    if l+r == n:
        lista.append((l,r))
    l += 1
    r -= 1
print lista

#Output
[(0, 6), (1, 5), (2, 4), (3, 3)]

要删除重复项,您可以使用 set()

你可以这样做:

n = 6
lst = [[i, n-i] for i in range(n)]

这可以是可能的辅助函数之一。

# python 3.x
def solution(number):
    return [[i, number - i] for i in range(number // 2 + 1)]

>>>solution(6)
[[0, 6], [1, 5], [2, 4], [3, 3]]

>>>solution(10)
[[0, 10], [1, 9], [2, 8], [3, 7], [4, 6], [5, 5]]

因为你不想重复,你可以停在中间,确保它适用于奇数和偶数:

[(i, n - i) for i in range(1, (n + 1) // 2)]

这是一个例子:

>>> n=6
>>> [(i, n - i) for i in range(1, (n + 1) // 2)]
[(1, 5), (2, 4)]
>>> n=7
>>> [(i, n - i) for i in range(1, (n + 1) // 2)]
[(1, 6), (2, 5), (3, 4)]
>>> n=10
>>> [(i, n - i) for i in range(1, (n + 1) // 2)]
[(1, 9), (2, 8), (3, 7), (4, 6)]