题目描述
 将编号为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










