python解初中题_用python解一道数独小题
個(gè)人的第一篇博文,還請多多支持,不當(dāng)之處,還請多多指教。(以后有精力還會寫更多的文章)
本人是一名大一狗,目前為止學(xué)了半年python,對python也就有一點(diǎn)點(diǎn)的了解,沒事愛編寫一些小程序玩,不過都是些簡單的小程序啦。。。在大佬面前不值一提。
今天元宵節(jié),早上看了我關(guān)注的叫三樂大掌柜的up的一個(gè)視頻,將1-25無重復(fù)的填入5?5的方格紙中,使每一行、每一列和兩條對角線的和都相等。
這題有意思,我想用python程序解之。做程序就要先想一想思路了,我的第一反應(yīng)就是將25個(gè)數(shù)進(jìn)行全排列,但當(dāng)我算了算25!的時(shí)候,我就放棄了
(25!=15511210043330985984000000)。
退一步,解3?3的吧。
這樣,題就簡化為:將1-9無重復(fù)的填入3?3的方格紙中,使每一行、每一列和兩條對角線的和都相等。
首先得到1-9的排列就難住了我,于是就去CSDN查找有關(guān)python排列的文章,這才知道python中有一個(gè)叫itertools的庫,可以做排列。
只需這樣:
import itertools
a = [1, 2, 3, 4]
b = list(itertools.permutations(a))
print(b)
輸出:[(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)]
共有24組排列,每個(gè)排列都是一個(gè)元組。
為了便于描述,先把九個(gè)數(shù)命名如下:
x11 x12 x13
x21 x22 x23
x31 x32 x33
學(xué)過線性代數(shù)的小伙伴可以看作一個(gè)3?3的矩陣,接下來就是要填數(shù)字了。廢話已經(jīng)不少了,直接上python代碼。
import itertools
a = [i for i in range(1, 10)]
b = list(itertools.permutations(a))
#print(b)
for tupl in b:? ?#填數(shù)字
x11 = tupl[0]
x12 = tupl[1]
x13 = tupl[2]
x21 = tupl[3]
x22 = tupl[4]
x23 = tupl[5]
x31 = tupl[6]
x32 = tupl[7]
x33 = tupl[8]
if (x11+x12+x13)\#python支持連等
== (x21+x22+x23)\
== (x31+x32+x33)\
== (x11+x22+x33)\
== (x13+x22+x31)\
== (x11+x21+x31)\
== (x12+x22+x32)\
== (x13+x23+x33):
print(tupl[0 : 3])
print(tupl[3 : 6])
print(tupl[6 : 9])
print(" ") #打印空行
這樣就用窮舉的方法完成了數(shù)獨(dú)的填寫,輸出如下:
(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)
共有八組解。
這就完成了數(shù)獨(dú)的填寫。
(注:python版本為3.7.1)
如有更好的解法,還請私信我。(我的郵箱1569228598@qq.com)
歡迎點(diǎn)贊、投幣、轉(zhuǎn)發(fā),更新不及時(shí),謹(jǐn)慎關(guān)注。
總結(jié)
以上是生活随笔為你收集整理的python解初中题_用python解一道数独小题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python列表常用方法_第24p,必须
- 下一篇: python 十六进制转中文_Pytho