冬雪雪冬 发表于 2018-6-4 10:37:00

Python:每日一题 180

本帖最后由 冬雪雪冬 于 2018-6-10 16:12 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。开始阶段是看不到其他人的回帖的,等答题完成,开始评分时再取消限制。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
给你n个正整数(n为偶数),将这些数两两组合并将值相加,再将各个加的结果相乘,某种组合可以得到最终结果的值最大,求出最大值是多少。
例如给你的数字是28, 12, 89, 15, 28, 4, 36, 55,可以有不同的组合,如(28 + 12) * ( 89 + 15) * (28 + 4) * (36 + 55),(12 + 4) * (89 + 15) * (28 + 28) * (55 + 36)等等,其中必有一种可能得到结果是最大的(17795736)。

**** Hidden Message *****

8306最硬 发表于 2018-6-4 12:33:37

本帖最后由 8306最硬 于 2018-6-4 12:43 编辑

沙发!!def fun(x):
    x = sorted(x)
    return sum(x) if len(x) == 2 else (x + x[-1]) * fun(x)

zjt4kg 发表于 2018-6-4 13:26:15

def calMax(iterable):
      if iterable == None:
                return
      for each in iterable:
                assert each > 0 ,'必须都是正数!'
                assertisinstance(each,int) ,'必须都是整数!'
      lenth = len(iterable)
      assert lenth % 2 == 0 ,'必须是偶数个数字!'
      list_temp = list(iterable)                        
      list_temp.sort()
      result = 1
      for i in range(int(lenth/2)):
                result *= (list_temp+list_temp[-(i+1)])
      return result


list1 =

print(calMax(list1))

冰封雪舞 发表于 2018-6-4 16:44:05

本帖最后由 冰封雪舞 于 2018-6-10 20:59 编辑

x=
k=0
a1=0
b1=0
c1=0
d1,e1,f1,g1,h1,=0,0,0,0,0
for a in range(0,8):      
      for b in range(0,8) :
            if b==a:
                continue
            for c in range(0,8) :
                if b==c or c==a:
                  continue
                for d in range(0,8) :
                  if d==a or d==b or d ==c:
                        continue
                  for e in range(0,8):
                        if e==a or e==b or e==c or e==d:
                            continue
                        for f in range(0,8):
                            if f ==a or f==b or f==c or f==d or f==e:
                              continue
                            for g in range(0,8):
                              if g ==a or g==b or g==c or g==d or g==e or g==f:
                                    continue
                              for h in range(0,8):
                                    if h ==a or h==b or h==c or h==d or h==e or h==f or h==g:
                                        continue
                                    j=(x+x)*(x+x)*(x+x)*(x+x)
                                    if j>k:
                                        k=j
                                        a1,b1,c1,d1,e1,f1,g1,h1=x,x,x,x,x,x,x,x
                                                                                       
print('值最大的组合是(%d+%d)*(%d+%d)*(%d+%d)*(%d+%d)=%d'%(a1,b1,c1,d1,e1,f1,g1,h1,k))

程序太长,估计粘贴的少了点东西

aaaqqq2004 发表于 2018-6-4 17:21:40

#未考虑效率问题,先撸出来
from itertools import permutations
numbers=
maxnum=
mymax=0
if len(numbers)%2!=0:
    print ("数字个数不是偶数,无法两两相加!")
else:
    for i in permutations(numbers,len(numbers)):
      if (i+i)*(i+i)*(i+i)*(i+i)>mymax:
            mymax=(i+i)*(i+i)*(i+i)*(i+i)
            for k in range(0,len(numbers)):
                maxnum=i
                        
print (maxnum)
print (mymax)

运行结果:


17795736

colinshi 发表于 2018-6-4 17:43:36

lis =
lis.sort()
for i in range(len(lis)//2):
        print('(',lis,'+',lis,')', end ='*')
最后一个*我赖的处理了。

凌九霄 发表于 2018-6-4 17:56:31

本帖最后由 凌九霄 于 2018-6-6 08:38 编辑

import functools
import operator

# 解题的要点应该是各个数的大小差要尽可能的小,这样它们的积才能最大,明白这一点题目就简单了,排序后,
# 用最大值加最小值,次大值加次小值....以此类推,所得和相乘即可

def maximum(lst):
    tmp = sorted(lst)
    length = len(tmp)
    Tlst = list(zip(tmp[:int(length / 2)], tmp[::-1]))
    if length % 2 != 0:
      Tlst.append((tmp[::-1], 0))

    return functools.reduce(operator.mul, list(map(sum, Tlst)), 1)

塔利班 发表于 2018-6-4 18:49:10

def f(x):
    x=sorted(x)
    N=len(x)//2
    result=1
    for i in range(N):
      result*=(x+x)
      print('(%d+%d)'%(x,x),end='')
      if i<N-1:
            print(end='*')
      else:
            print('=',result)

f((28, 12, 89, 15, 28, 4, 36, 55))

z1446773686 发表于 2018-6-4 22:35:36

本帖最后由 z1446773686 于 2018-6-5 14:34 编辑

import random
list1=
num=6;list2=[]
count=0
while(count<1000):
    cent=0
    list3=[]
    list4=[]
    for eacht in range(num/2):
      nub1=0;nub2=0
      nub1,nub2=random.sample(list1,2)
      list3.append(nub1)
      list3.append(nub2)
    for each in list3:
      if list3.count(each)>1:
            cent = 1
            break
    if cent:
      continue
    print(list3)         
    for each in range(len(list3)-1):
      list4.append(list3+list3)
    tit2=1
    for eacht in list4:
      tit2*=eacht
    if tit2 not in list2:
      list2.append(tit2)
      count-=1
    print(len(list2))
    print(max(list2))
    #print(list2.count(tit2))
    print('*')
    count+=1
建立在元素成员无一重复和中途添加的基础上

lan358088 发表于 2018-6-5 10:12:52

x =
num = len(x)//2
x.sort()
for i in range(num):
    y1 =int(x)
    y2 =int(x)
    s = y1+y2
    T = T * s
print(T)

grf1973 发表于 2018-6-5 10:36:00

def maxmult(a):
        s,res=sorted(a),1       
        for i in range(len(s)//2):       
                res*=s+s
        return res

a=
print(maxmult(a))

曹贼不要怕 发表于 2018-6-5 10:42:58

python

nononoyes 发表于 2018-6-5 13:36:53

import itertools
def test_func1(num_list):
    tmp_list = itertools.permutations(num_list)
    res_list=[]
    for one intmp_list:
      res_list.append(one)
    return res_list
list1 =
newList = test_func1(list1)
num = len(newList)//len(list1)
list2 = newList[:num]
sumlist = []
mullist = []

for ele in list2:
    for i in range(len(list1)):
      if(i%2==0):
            sumlist.append(ele+ele)
    multi = 1
    for j in sumlist:
      multi = multi * j
    mullist.append(multi)
    sumlist = []
    multi = 1
print('最大值为:',max(mullist))

yunying12321 发表于 2018-6-5 15:00:40

ll =
jj = sorted(ll)

ss = []
u = 1

for i in range(len(ll)//2):
    ss.append(jj+jj)

for i in range(len(ss)):
    u *= ss

print('最大的结果是:'+str(u))

776667 发表于 2018-6-6 10:47:08

本帖最后由 776667 于 2018-6-11 09:50 编辑

from itertools import permutations

def fun180(*x):
    result_list = []
    for i in permutations(x):
      i = list(i)
      sum_list = []
      for j in range(len(i))[::2]:
            sum_list.append(str(i+i))
      result_list.append(eval('*'.join(sum_list)))
    return max(result_list)

我这个不用输入列表,直接敲数字进去就行了,因为题目是要求输入数字而不是输入列表,所以我这么写,报错是输入列表作为参数了
>>> fun180(28,12,89,15,28,4,36,55)
17795736

小庆子 发表于 2018-6-6 15:03:26

a = sorted()

b = []
for i in range(int(len(a)*0.5)):
    b.append(a+a[-(i+1)])
   
result = 1
for x in b:
    result *= x

print(result)

只会写BUG 发表于 2018-6-6 19:00:37

做不来

安南蒲 发表于 2018-6-6 21:49:01

number=
i = 0
n = 7
sume =

while i < 7:
    j = 0
    while j + 1 <= 7 :
      if number > number:
            ex = number
            number = number
            number = ex
      j = j + 1
    i = i + 1
i = 0
n = 7
while i < 4:
    sume = number + number
    i += 1
mul = 1
i = 0
while i < 4:
    mul = mul * sume
    i = i + 1
   
print(number)
print(sume)
print(mul)

安南蒲 发表于 2018-6-6 21:49:46



17795736

旅行, 发表于 2018-6-6 22:01:04

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