def calc(seq, where): maximum, max_item = 0, [] for i in seq: product = int(i[:where]) * int(i[where:]) if product > maximum: maximum, max_item = product, i elif product == maximum: max_item +=','+ i print"Maximum at", max_item, ",product", maximum def permute(seq): l = len(seq) if l <=2: if l ==2: return [ seq, [seq[1], seq[0]] ] else: return [seq] else: res=[] for i in range(len(seq)): rest = seq[:i] + seq[i+1:] for x in permute(rest): res.append(seq[i:i+1] + x) return res import sys seq = list(sys.argv[1]) where = int(sys.argv[2]) thelist = [ ''.join(x) for x in permute(seq) ] print'Got', len(thelist), 'items.' calc(thelist, where)
看看用矩阵的思维做的
def solve(seq,where): n = len(seq) seq.sort() seq.reverse() table = [ [] for i in range(n) ] left, right = where, n - where leftr = long('1'*left) rightr = long('1'*right) flag=[] for item in [ int(x) for x in seq]: for i in range(left): table[left-i-1] = (leftr +10**i) * rightr for i in range(right): table[right-i+where-1] = leftr * (rightr +10**i) for i in flag: table[i] = 0 tablesorted = table[:] tablesorted.sort() maxindex = table.index(tablesorted[-1]) if maxindex >= where: rightr = rightr + (item-1) *10**(right-maxindex+where-1) else: leftr = leftr + (item-1) *10**(left-maxindex-1) flag.append(maxindex) #print maxindex, leftr, rightr return leftr, rightr import sys leftr, rightr = solve(list(sys.argv[1]),int(sys.argv[2])) print"Maximum at", leftr,rightr, ',product', leftr*rightr