用Python破解九宮格

寫(xiě)在前面

大家好,今天開(kāi)始我將會(huì)在這個(gè)專(zhuān)欄記錄自己每天學(xué)習(xí)Python的心得體會(huì) ,歡迎技術(shù)大牛交流 ,互相學(xué)習(xí)。

問(wèn)題引入:

1至9個(gè)數(shù)字 ,橫豎都有3個(gè)格,怎么使每行、每列兩對(duì)角線上的數(shù)字之和都等與15呢?

算法思路:

(1)九宮格三行三列 ,每一行都是1-9中的3個(gè)數(shù)字。首先從1-9數(shù)字中獲取3個(gè)數(shù)字全排列組合【s1,s2,...,sn】,根據(jù)排列組合知識(shí)可得有9*8*7=504種組合形式;

(2)總共3行,每一行從504個(gè)序列里取一個(gè)數(shù)仿真第一排、第二排、第三排,形成一個(gè)3*3的矩陣;

(3)對(duì)于這個(gè)矩陣,只用判斷行、列、主、副對(duì)角線的和為15就可以解決問(wèn)題。


代碼:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

#@Time :2018/9/19 1:00pm

#@Author:stormwen

#Software:Pycharm

import itertools

count=0

nums=[xfor xin range(1,10)]

sequence_3nums=[pfor pin itertools.permutations(nums,3)if sum(p)==15]

print(sequence_3nums[:5])

for row1_1,row1_2,row1_3in sequence_3nums:

? ? for row2_1, row2_2, row2_3in sequence_3nums:

? ? ? ? for row3_1, row3_2, row3_3in sequence_3nums:

? ? ? ? ? ? if row1_1+row1_2+row1_3==15\

and row2_1+row2_2+row2_3==15\

and row3_1+row3_2+row3_3==15\

and row1_1+row2_1+row3_1==15\

and row1_2+row2_2+row3_2==15\

and row1_3+row2_3+row3_3==15\

and row1_1+row2_2+row3_3==15\

and row1_3+row2_2+row3_1==15:

? ? ? ? ? ? ? ? row1=row1_1,row1_2,row1_3

? ? ? ? ? ? ? row2=row2_1,row2_2,row2_3

if len(set(row1)&set(row2))== 0:

? ? ? ? ? ? ? ? ? ? ? count=count+1

? ? ? ? ? ? ? ? ? ? ? print(20 * "*")

print(row1_1,row1_2,row1_3)

print(row2_1,row2_2,row2_3)

print(row3_1,row3_2,row3_3)

print(count)

結(jié)果展示:

********************

2 7 6

9 5 1

4 3 8

********************

2 9 4

7 5 3

6 1 8

********************

4 3 8

9 5 1

2 7 6

********************

4 9 2

3 5 7

8 1 6

********************

6 1 8

7 5 3

2 9 4

********************

6 7 2

1 5 9

8 3 4

********************

8 1 6

3 5 7

4 9 2

********************

8 3 4

1 5 9

6 7 2


注意事項(xiàng):

在編寫(xiě)代碼的過(guò)程中,有一個(gè)細(xì)節(jié)需要主要,如何過(guò)濾重復(fù)矩陣呢?

比如:1 9 5

? ? ? ? ? ?9 5 1

? ? ? ? ? ?5 1 9

小技巧:

? ? ? ? ? ? ?把第一行和第二行都放到集合里面,主要判斷他們的交集長(zhǎng)度為0,則表示他們沒(méi)有交集就可以了

? ? ? ? ? ? ?if len(set(row1)&set(row2))==0:

有人會(huì)問(wèn)了:為什么不是三行比,例如 row1&row2&row3呢?

因?yàn)榍皟尚卸ㄏ聛?lái),最后一行肯定也定了。

好了,感興趣的同學(xué)趕緊運(yùn)行一下代碼吧,會(huì)讓你馬上喜歡上Python這么語(yǔ)言的 。

原創(chuàng)不易 ,如果你覺(jué)得不錯(cuò),點(diǎn)個(gè)關(guān)注吧,留下你的小心心哦 。歡迎志同道合的技術(shù)大神留言交流哦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,817評(píng)論 0 10
  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海帶_4bbc閱讀 876評(píng)論 1 2
  • 74年7月,我從黃石一中高中畢業(yè),回到家鄉(xiāng)東風(fēng)農(nóng)場(chǎng)。入黨申請(qǐng)書(shū)一交,褲腿一卷,就去參加“雙搶”。其實(shí),正式分配工作...
    Bernardxiao閱讀 269評(píng)論 0 0
  • 這是電影《甜蜜蜜》里,黎小軍對(duì)方小婷說(shuō)的一句臺(tái)詞,說(shuō)完之后,他離開(kāi)了方小婷,投向了李翹的懷抱。即使那個(gè)時(shí)候,他并不...
    若洛閱讀 4,129評(píng)論 2 2
  • 1. 我是個(gè)懼怕疾病疼痛的人。 三十之后,我便感覺(jué)各種病痛找上我來(lái)。首先是頸椎疼痛,接著是腰椎疼痛,后來(lái)遷居到重慶...
    八月萑葦閱讀 643評(píng)論 5 3

友情鏈接更多精彩內(nèi)容