Chinaunix首页 | 论坛 | 博客
  • 博客访问: 126397
  • 博文数量: 36
  • 博客积分: 2174
  • 博客等级: 大尉
  • 技术积分: 437
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 21:50
文章存档

2012年(4)

2010年(5)

2009年(15)

2008年(12)

分类: WINDOWS

2008-10-09 07:22:57

# -*- 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) |
给主人留下些什么吧!~~

chinaunix网友2009-11-01 21:06:23

横起来加是15 竖着加也是15 斜着加也是15