|
发表于 2016-10-5 22:22:38
|
显示全部楼层
答案应该是对的,但是我换了一种算法,不要穷举所有数,不然效率太低。
我是生成pandigital,然后依次判断,27.3秒搞定。
- ['4130952867', '1430952867', '4160357289', '4106357289', '1460357289', '1406357289']
- [Finished in 27.3s]
复制代码- def getPan(n):
- if n == 2:
- return ['210','120','102','201','021','012']
- if n>2:
- pan = getPan(n-1)
- length = len(pan[0])
- pannew = []
- for each in pan:
- pannew.append(str(n)+str(each))
- pannew.append(str(each)+str(n))
- for j in range(1,length):
- pannew.append(str(each)[:j]+str(n)+str(each)[j:])
- return pannew
- def judge(plist):
- prime = [2,3,5,7,11,13,17]
- returnlist = []
- for each in plist:
- if each[0] == '0':
- pass
- else:
- flag = 1
- for j in range(1,8):
- if each[j] == '0':
- if int(each[j+1:j+3]) % prime[j-1] != 0:
- flag = 0
- break
- else:
- if int(each[j:j+3]) % prime[j-1] != 0:
- flag = 0
- break
- if flag == 1:
- returnlist.append(each)
- return returnlist
- plist = getPan(9)
- plist = judge(plist)
- print (plist)
复制代码 |
|