柯基不是天然卷 发表于 2018-6-6 23:09:59

本帖最后由 柯基不是天然卷 于 2018-6-6 23:11 编辑

from itertools import product
from itertools import combinations
import itertools
list =
def test_func1(num_list):
    tmp_list = itertools.permutations(num_list)
    global res_list
    res_list=[]
    for one in tmp_list:
      res_list.append(one)
    print '元素不允许重复出现排列总数为:', len(res_list)
test_func1(list)
MAX = 0
MAX2 = 0
for list_one in res_list:
    a = 0
    mul = 1
    while a<=len(list)-1:
      mul = mul * (list_one+list_one)
      a+=2
      MAX2 = mul
      if MAX <= MAX2:
            MAX = MAX2
print '最大的数是:',MAX

旅行, 发表于 2018-6-6 23:48:37

import random
time = 10
q = []
num = input('请输入您想输入的数组:')
num1 = num.split(',')
temp = []
for i in num1:
    if i != ',':
      temp.append(i)
print(temp)
if len(temp) % 2 == 0 :
    while time > 0 :
      random.shuffle(temp)
      w = temp
      n = len(w)
      s = 0
      while s ==len(w):
               
               sum =1
               sum1 =(int(w)+int(w))
               sum = sum1 * sum
               s += 2
      q.append(sum)
      time -= 1
    print(q)
      
else:
    print('请重新输入:')

asdfg5954457 发表于 2018-6-7 04:39:58

一直覺得用最簡單的邏輯去排列的話會有太多重複的組合
想了好久才想到一個方法是可以直接排出所有不重複的組合
比起考代碼感覺更像是訓練數學邏輯了
import copy
que=

def cal(num):
    max=0
    for each in LI(len(num)):
      result=1
      for k in range(int(len(num)/2)):
            result = result*(num]+num])
      if result > max:
            print(result,'    找到更大的')
            max=result

def LI(lenP):
    if lenP==2:
      return []
    else:
      b=[]
      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=k,k[-1]
      b2=b2+b1
    b2=b2+b
    lenP=lenP-2
    if lenP>2:
      return makelist(lenA,lenP,b2)
    else:
      return b2

cal(que)

大头目 发表于 2018-6-7 11:26:15

def a_m(list_n):
        while list_n:
                x = max(list_n)
                y = min(list_n)
                print(x,y)
                list_n.remove(x)
                list_n.remove(y)
                print(list_n)
                z = x + y
                yield z

s = 1
for i in a_m():
        s *= i
        print(s)
#有点取巧,怎么强算还没想出来,递归的话估计会很慢吧

夏未至夜未央 发表于 2018-6-7 15:13:19

list1 =
list1.sort()
list2 = []
num = 0
result = 1

for i in list1:
    num += 1
    list2.append((i, list1[-num]))
list2 = list2[:len(list2)//2]

print(list2)
for i in list2:
    result *= (i + i)

print(result)

久疤K 发表于 2018-6-7 19:43:34

这个题,个人认为与已知总和,求两个数的积的最大值一样。
就是尽量让每个和数接近。
>>> def fun( _list ):
        ls = sorted(_list)
        n = len( ls )
        s = 1
        for i in range(n//2):
                s *= ls + ls
        return s

>>> fun()
17795736

the0503 发表于 2018-6-8 00:20:19

本帖最后由 the0503 于 2018-6-8 10:04 编辑

抱歉,发表后没有任何提示,以为没提交上。

the0503 发表于 2018-6-8 00:21:22

本帖最后由 the0503 于 2018-6-8 10:05 编辑

同上。抱歉,没找到地方删帖。

the0503 发表于 2018-6-8 00:21:58

自己测试没有问题
a = (28, 12, 89, 15, 28, 4, 36, 55)
def foo(a):
        if len(a) == 2:
                list2 = []
                n = a+a
                list2.append(n)
                return list2
        else:
                list2 = *len(a)
                for i in range(1,len(a)):
                        list1 = list(a)
                        list2 = list1+list1
                        del list1,list1
                        b = tuple(list1)
                        list2 = max(listm(foo(b),list2))
                return list2

def listm(list1,n):
        for i in range(len(list1)):
                list1 = list1*n
        return list1

print(max(foo(a)))

the0503 发表于 2018-6-8 00:22:27

为什么提交不了

the0503 发表于 2018-6-8 00:23:44

提交不了?

the0503 发表于 2018-6-8 00:24:31

{:5_90:}

the0503 发表于 2018-6-8 00:26:57

占坑

the0503 发表于 2018-6-8 00:29:22

发不了啊

the0503 发表于 2018-6-8 00:31:14

# -*- coding: utf-8 -*-
a = (28, 12, 89, 15, 28, 4, 36, 55)
def foo(a):
    if len(a) == 2:
      list2 = []
      n = a+a
      list2.append(n)
      return list2
    else:
      list2 = *len(a)
      for i in range(1,len(a)):
            list1 = list(a)
            list2 = list1+list1
            del list1,list1
            b = tuple(list1)
            list2 = max(listm(foo(b),list2))
      return list2

def listm(list1,n):
    for i in range(len(list1)):
      list1 = list1*n
    return list1

print(max(foo(a)))

the0503 发表于 2018-6-8 00:31:44

# -*- coding: utf-8 -*-
a = (28, 12, 89, 15, 28, 4, 36, 55)
def foo(a):
    if len(a) == 2:
      list2 = []
      n = a+a
      list2.append(n)
      return list2
    else:
      list2 = *len(a)
      for i in range(1,len(a)):
            list1 = list(a)
            list2 = list1+list1
            del list1,list1
            b = tuple(list1)
            list2 = max(listm(foo(b),list2))
      return list2

def listm(list1,n):
    for i in range(len(list1)):
      list1 = list1*n
    return list1

print(max(foo(a)))

occk 发表于 2018-6-8 00:55:06

#相信用户的前提下:def list_max(*num):
    num = list(num)
    num.sort()
    i = 0
    y = 1
    while i < len(num) / 2:
      x = num + num[len(listx) - i - 1]
      y *= x
      i += 1
    return y

listx = []
num = input("请输入偶数个数字:")
num = int(num)
for i in range(num):
    num = input("请输入第"+str(i+1)+"个数字:")
    listx.append(int(num))
print("任意两个数和之积最大为",list_max(*listx))

occk 发表于 2018-6-8 00:56:35

#相信用户的前提下:
def list_max(*num):
    num = list(num)
    num.sort()
    i = 0
    y = 1
    while i < len(num) / 2:
      x = num + num
      y *= x
      i += 1
    return y

listx = []
num = input("请输入偶数个数字:")
num = int(num)
for i in range(num):
    num = input("请输入第"+str(i+1)+"个数字:")
    listx.append(int(num))
print("任意两个数和之积最大为",list_max(*listx))

lining 发表于 2018-6-10 10:55:08

1

随心所欲—1102 发表于 2018-6-10 22:22:02

看看
页: 1 [2] 3
查看完整版本: Python:每日一题 180