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:43 编辑
沙发!!def fun(x):
x = sorted(x)
return sum(x) if len(x) == 2 else (x + x[-1]) * fun(x)
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-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))
程序太长,估计粘贴的少了点东西 #未考虑效率问题,先撸出来
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 lis =
lis.sort()
for i in range(len(lis)//2):
print('(',lis,'+',lis,')', end ='*')
最后一个*我赖的处理了。 本帖最后由 凌九霄 于 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) 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-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
建立在元素成员无一重复和中途添加的基础上 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)
def maxmult(a):
s,res=sorted(a),1
for i in range(len(s)//2):
res*=s+s
return res
a=
print(maxmult(a)) python 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)) 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-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 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) 做不来 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)
17795736 1