qq_笑_17
importitertoolsdefcuts(holes,length):result=[]start=0forholeinholes:result.append(hole-start)start=holeresult.append(length-start)returnresultdefsplit(length):result=[]hole_selection=range(1,length)max_hole_count=length-1foriinrange(max_hole_count):forjinitertools.combinations(hole_selection,i+1):cut=cuts(j,length)r=[]forkinrange(1,len(cut)+1):forresinitertools.combinations(cut,k):s=sum(res)r.append(s)si=Trueforlinrange(1,length+1):ifnotlinr:si=Falsebreakifsi:ifnotjinresult:result.append(j)returnresultresults=split(13)printresults[0]printforresultinresults:printresult顺手写的。。请无视各种ijklsi什么谜样的变量名。。。就是排列组合和穷举罢了其实13个分割3块的就48个打洞方案((1,3,6)和(7,10,12)算是2个。。。)如果要快,抓到第一个ifsi:ifnotjinresult:result.append(j)的时候就丢出去就完了