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