python 全排列

python 全排列

题目

现在有 5 张扑克牌,其中 2 张是王牌(大小王),J、Q、K 各一张。将这 5 张牌排成一排,左端或者右端至少有一端王牌的排法有多少种?请说明计算方法

# coding:utf-8


C = ['大王','小王', 'J', 'Q', 'K']

def printC(n):
    if(C[0] == '小王' or  C[len(C)-1] == '大王' or
       C[0] == '大王' or  C[len(C)-1] == '小王'):
        for i in range(0, n):
            print(C[i], end = '\t')
        print()

def swap(a, b):
    t = C[a]
    C[a] = C[b]
    C[b] = t


def dfs(index, n):
    # 如果交换到最后一个
    if(index == n - 1):
        printC(n)
        return
    else:
        for i in range(index, n):
            swap(i, index)
            # 不断的和index后面的东西交换
            dfs(index + 1, n)
            # 交换回来
            swap(i, index)



dfs(0, len(C))
input()
    

84种

手算的话

- ---- -----
大王 1 2 3 4
小王 1 2 3 4
1 2 3 4 小王
1 2 3 4 大王
大王 1 2 3 小王
小王 1 2 3 大王

其中最后两行会在前四行里重复 次数为 3x2x1 + 3x2x1 = 12
前四行为 4x3x2x1 x4 = 96
96 - 12 = 84

你可能感兴趣的:(python)