藍橋python—— 方格填數【2016 第六題】

無敵小短腿發表於2020-11-06

藍橋python—— 方格填數【2016 第六題】

【題目描述】
如下的 10 個格子

題目
填入 0~9 的數字。要求:連續的兩個數字不能相鄰。 (左右、上下、對角都算相鄰), 一共有多少種可能的填數方案?
請填寫表示方案數目的整數。 注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。

和大家說下我的思路吧。我反正能不動腦子,能暴力就暴力破解!

腦子將每個框框編號,按照陣列的下標從0-9。隨後生成0-9的所有全排列按順序放置在框框中,最後即判斷是否可行!
判斷的話因為只有是個框框,那就一個框框判斷他的周圍是否有相鄰數字的,若全部都沒有,則count加1



##方格填數
import itertools
a=[i for i in range(10)]
x=list(itertools.permutations(a,10))
count=0
for i in x:
    flag=False
    if abs(i[0]-i[4])==1 or abs(i[0]-i[3])==1 or abs(i[0]-i[5])==1 or abs(i[0]-i[1])==1:
        flag=True
    if abs(i[1]-i[0])==1 or abs(i[1]-i[2])==1 or abs(i[1]-i[5])==1 or abs(i[1]-i[4])==1 or abs(i[1]-i[6])==1 :
        flag=True
    if abs(i[2]-i[1])==1 or abs(i[5]-i[2])==1 or abs(i[2]-i[6])==1 :
        flag=True
    if abs(i[3]-i[0])==1 or abs(i[3]-i[4])==1 or abs(i[3]-i[8])==1 or abs(i[3]-i[7])==1 :
        flag=True
    if abs(i[4]-i[0])==1 or abs(i[4]-i[3])==1 or abs(i[4]-i[7])==1 or abs(i[8]-i[4])==1 or abs(i[4]-i[9])==1 or abs(i[5]-i[4])==1 or abs(i[4]-i[1])==1:
        flag=True
    if abs(i[5]-i[1])==1 or abs(i[5]-i[0])==1 or abs(i[5]-i[4])==1 or abs(i[5]-i[8])==1 or abs(i[5]-i[9])==1 or abs(i[5]-i[6])==1 or abs(i[5]-i[2])==1 :
        flag=True
    if abs(i[6]-i[2])==1 or abs(i[6]-i[1])==1 or abs(i[6]-i[5])==1 or abs(i[6]-i[9])==1  :
        flag=True
    if abs(i[7]-i[3])==1 or abs(i[7]-i[4])==1 or abs(i[7]-i[8])==1 :
        flag=True
    if abs(i[8]-i[3])==1 or abs(i[8]-i[4])==1 or abs(i[8]-i[5])==1 or abs(i[8]-i[7])==1 or abs(i[8]-i[9])==1 :
        flag=True
    if abs(i[9]-i[8])==1 or abs(i[9]-i[4])==1 or abs(i[9]-i[5])==1 or abs(i[9]-i[6])==1:
        flag=True
    if not flag:
        count+=1
print(count)


答案為1580

相關文章