|
发表于 2018-6-7 04:39:58
|
显示全部楼层
一直覺得用最簡單的邏輯去排列的話會有太多重複的組合
想了好久才想到一個方法是可以直接排出所有不重複的組合
比起考代碼感覺更像是訓練數學邏輯了
- import copy
- que=[28, 12, 89, 15, 28, 4, 55 ,36]
- def cal(num):
- max=0
- for each in LI(len(num)):
- result=1
- for k in range(int(len(num)/2)):
- result = result*(num[each[2*k]]+num[each[2*k+1]])
- if result > max:
- print(result,' 找到更大的')
- max=result
- def LI(lenP):
- if lenP==2:
- return [[1,2]]
- else:
- b=[[lenP-1,lenP-2]]
- return makelist(lenP,lenP,b)
- def makelist(lenA,lenP,b):
- b2=[]
- for i in b:
- i.append(lenP-3)
- i.append(lenP-4)
- for i in range(lenA-lenP+2):
- b1=copy.deepcopy(b)
- for k in b1:
- j=k.index(lenA-1-i)
- k[-1],k[j]=k[j],k[-1]
- b2=b2+b1
- b2=b2+b
- lenP=lenP-2
- if lenP>2:
- return makelist(lenA,lenP,b2)
- else:
- return b2
- cal(que)
复制代码 |
评分
-
查看全部评分
|