# -*- coding: cp936 -*-
import copy
nm=[1,2,3,4,5,6,7,8,9]
class test:
ans=[]
de=[]
def findnum(self,lst):
#找出所有横向合格的。 3个数一组。
re=[]
if len(lst)==0:
return [[]]
for i in lst:
ilst=copy.copy(lst)
ilst.remove(i)
for j in ilst:
jlst= copy.copy(ilst)
jlst.remove(j)
for k in jlst:
if (i+j+k)==15:
klst=copy.copy(jlst)
klst.remove(k)
#关键一步是,用些次选出的三个数,和上次的结果结合,比如 这次是,1,5,9,那么,余下6个数组成的的集合一一合成。
for lse in self.findnum(klst):
re.append([i,j,k]+lse)
return re
#print (self.one,lst)
def setans(self):
##去掉竖向不合格的。余下72种结果。
row=self.findnum(nm)
for one in row:
if len(one)==9:
if one[0]+one[3]+one[6]==15 and one[1]+one[4]+one[7] and one[2]+one[5]+one[8]==15:
self.ans.append(one)
def showans(self):
print ("answer number is: ",len(self.ans))
for one in self.ans:
print ("anwser:",)
for i in range(0,8,3):
print (one[i],one[i+1],one[i+2])
def dell(self):
# 精简后的12个答案 去掉橫向的, 组合,为12个。
for i in self.ans:
if self.de==[]:
self.de.append(i)
else:
hava=False
for j in self.de:
for n in range(0,8,3):
if i[0]==j[n] and i[1]==j[n+1] and i[2]==j[n+2]:
hava=True
if (not hava) :
self.de.append(i)
print (len(self.de))
for one in self.de:
print ("anwser:",)
for i in range(0,8,3):
print (one[i],one[i+1],one[i+2])
if __name__=='__main__':
t=test()
t.setans()
t.showans()
t.dell()
阅读(2278) | 评论(1) | 转发(0) |