Created
May 8, 2017 16:55
-
-
Save ccat3z/833d8fba14b4040a1090c39be4dfb082 to your computer and use it in GitHub Desktop.
一道不知道什么时候的数学题
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python | |
import timeit | |
maxNum=10 | |
numList=list(range(maxNum,0,-1)) #生成1...MAX的数列 | |
result=0 #初始化结果 | |
def f(numList, fixedNumList=[]): #f(剩下的数字(降序), 已经确定的数列) | |
for num in numList: #剩下的统统试一遍 | |
newFixedNumList= fixedNumList + [num] #加上它并生成可能的确定数列 | |
if len(newFixedNumList) == 1: #如果它是第一个 | |
preNum=0 #那么前面的数字算它0 | |
else: | |
preNum=newFixedNumList[-2] #获取前一个数字 | |
#如果前一个数字加上它的index <= 这个数字加上这个index | |
#或者放弃这种可能性 | |
if preNum + len(newFixedNumList) - 1 <= len(newFixedNumList) + num: | |
if len(newFixedNumList) == maxNum: #如果这是最后一个数字 | |
#print(newFixedNumList, end="\r\n") #符合题意 | |
global result #获取全局变量 | |
result=result + 1 #给结果加上1 | |
else: #如果不是最后一个数字 | |
#把剩下的数字和已经确定的数列交给f | |
f([x for x in numList if x != num], newFixedNumList) | |
else: #允许CPU偷懒 | |
break | |
#测速 | |
print(timeit.timeit("f(list(range(10,0,-1)))", "from __main__ import f", number=100)/100) | |
print(result/100) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment