rosalind练习题二十九

# Problem
# A signed permutation of length n is some ordering of the positive integers {1,2,…,n} in which each integer is then provided with either a positive or negative sign (for the sake of simplicity, we omit the positive sign). For example, π=(5,−3,−2,1,4) is a signed permutation of length 5.

# Given: A positive integer n≤6.
# Return: The total number of signed permutations of length n, followed by a list of all such permutations (you may list the signed permutations in any order).

# Sample Dataset
# 2
# Sample Output
# 8
# -1 -2
# -1 2
# 1 -2
# 1 2
# -2 -1
# -2 1
# 2 -1
# 2 1

# 返回所有符合条件的排列的总数,以及列出所有符合条件的排列。

import itertools

def signed_permutations(n):
    numbers = list(range(1, n + 1))
    permutations = list(itertools.permutations(numbers))
    total = len(permutations) * (2 ** n)
    signed_permutations = []

    for permutation in permutations:
        for signs in itertools.product([-1, 1], repeat=n):
            signed_permutation = [str(sign * number) for sign, number in zip(signs, permutation)]
            signed_permutations.append(' '.join(signed_permutation))

    return total, signed_permutations

n = 2

total, permutations = signed_permutations(n)
print(total)
for permutation in permutations:
    print(permutation)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值