0
点赞
收藏
分享

微信扫一扫

【思特奇杯·云上蓝桥-算法集训营】第1周 05.图书排列(python)

题目描述
将编号为1~10的10本书排放在书架上,要求编号相邻的书不能放在相邻的位置。
请计算一共有多少种不同的排列方案。

注意,需要提交的是一个整数,不要填写任何多余的内容。
答案提交
方法一:

re = 0
a = [i for i in range(10)]
n = [False for _ in range(10)]
def check():
    for i in range(9):
        if abs(a[i]-a[i+1]) == 1:
            return False
    return True
def f(k):
    global re
    if k == 10:
        if check():
            re += 1
            return
    for i in range(10):
        if not n[i]:
            n[i] =True
            a[k] = i
            r(k+1)
            n[i] = False
f(0)
print(re)#479306

这个方法虽然能得出正确答案 但是运行计算时间会过长

方法二:

from itertools import * #这里需要用到python的全排列函数
sum=0
for i in permutations(range(1,11)):
    if abs(i[0]-i[1])!=1 :
        if abs(i[1]-i[2])!=1:
            if abs(i[2]-i[3])!=1:
                if abs(i[3]-i[4])!=1:
                    if abs(i[4]-i[5])!=1:
                        if abs(i[5]-i[6])!=1:
                            if abs(i[6]-i[7])!=1:
                                if abs(i[7]-i[8])!=1:
                                    if abs(i[8]-i[9])!=1:
                                        sum+=1
        
print(sum) # 479306

举报

相关推荐

0 条评论