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