代码之家  ›  专栏  ›  技术社区  ›  7beggars_nnnnm

如何打印到文件输出(除了查找)一组12行的所有可能状态

  •  0
  • 7beggars_nnnnm  · 技术社区  · 3 年前

    我有12行(包括|之前的数字)。每条线都可以包含1和最大值之间的自然数,最大值是12。我想找到并打印这12行可能处于的所有可能状态。下面是3个状态示例。

    1  | 1 2 3 4 5 6 7 8 9 10 11 12
    2  | 1 2 3 4 5 6 7 8 9 10 11 12
    3  | 1 2 3 4 5 6 7 8 9 10 11 12
    4  | 1 2 3 4 5 6 7 8 9 10 11 12
    5  | 1 2 3 4 5 6 7 8 9 10 11 12
    6  | 1 2 3 4 5 6 7 8 9 10 11 12
    7  | 1 2 3 4 5 6 7 8 9 10 11 12
    8  | 1 2 3 4 5 6 7 8 9 10 11 12
    9  | 1 2 3 4 5 6 7 8 9 10 11 12
    10 | 1 2 3 4 5 6 7 8 9 10 11 12
    11 | 1 2 3 4 5 6 7 8 9 10 11 12
    12 | 1 2 3 4 5 6 7 8 9 10 11 12
    

    1  | 1 2 3 4 
    2  | 1 2 3 4 5 6 7 8 9 10 11 12
    3  | 1 2 3 4 5 6 
    4  | 1 2 3 4 5 6 7 8 9 10 11 12
    5  | 1 2 3 4 5 6 
    6  | 1 2 3 4 5 6 7 8 9 10 11 12
    7  | 1 2 3 4 
    8  | 1 2 3 4 5 6 7 8 9 10 11 12
    9  | 1 2 3 4 5 
    10 | 1 2 3 4 5 6 7 8 9 10 11 12
    11 | 1 2 3 4 5 
    12 | 1 2 3 4 5 6 7 8 9 10 11 12
    

    1  | 1 
    2  | 1 2 3 4 5 6 7 8 9 10 11 12
    3  | 10 11 12
    4  | 1 2 3 4 5 6 7 8 9 10 11 12
    5  | 1 2 3 4 5 6 7 8 9 10 11 12
    6  | 7 8 9 10
    7  | 5 6 7 8 9 10 11 12
    8  | 1 2 3 4 5 6 
    9  | 3 4 5 6 7
    10 | 1 2 3 4 5 6 
    11 | 1 2 3 4 5 6 7 8 9 10 11 12
    12 | 10 11 12
    

    我不知道这里是否适合我的问题——也许我想要的答案是一个python脚本,如果你能指导我的话,谢谢你。

    我在Python中唯一知道的组合方法(但还不够)是下面的脚本

    import sys
    from itertools import chain, combinations
    
    def powerset(iterable):
        "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
        s = list(iterable)
        return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
    
    file = open('output.txt', 'a')
    stdout = sys.stdout
    sys.stdout = file
    print(list(powerset("1234567989")))
    
    sys.stdout = stdout
    file.close()
    

    我想我需要使用 for loop ,也许有11条领带?

    注:据我所知,组合总数为12x12=8.9161004e+12

    0 回复  |  直到 3 年前
        1
  •  3
  •   Tranbi    3 年前

    我认为你的理解可能是错误的。如果我正确理解了可能的组合,我就不算了 12^12 但是 sum(range(1,13))^12 组合。

    说明:对于每一行,您都有以下可能的组合:

    • 如果行以1开头,则有12种可能性
    • 如果以2开头,则为11,依此类推
    • ...
    • 如果以12开头,则为1

    这给了你从1到12的总和( sum(range(1,13)) ). 然后把它和你所有的12条线结合起来,你就得到了12的幂。

    您可以使用嵌套循环打印它们,但您的脚本会在某个时候崩溃:您的文件包含50714860157241037295616组合*12行(不包括额外的换行符),这将是数千个Exabytes。