Skip to content

Instantly share code, notes, and snippets.

@ccat3z
Created May 8, 2017 16:55
Show Gist options
  • Save ccat3z/833d8fba14b4040a1090c39be4dfb082 to your computer and use it in GitHub Desktop.
Save ccat3z/833d8fba14b4040a1090c39be4dfb082 to your computer and use it in GitHub Desktop.
一道不知道什么时候的数学题
#!/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