A25757. 编程实现:有N个正整数,现对N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,聪明的小蓝发现,排列方式不同,最后计算出的结果也不相同。计算规则:第一次:第一个数乘以第二个数乘以第三个数,结果记录为M(1);第二次:第二个数乘以第三个数乘以第四个数,结果记录为M(2);第三次:第三个数乘以第四个数乘以第五个数,结果记录为M(3);…第N-2次:第N-2个数乘以第N-1个数乘以第…
填空题
中等
知识点
题目描述
编程实现:
有N个正整数,现对N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,聪明的小蓝发现,排列方式不同,最后计算出的结果也不相同。
计算规则:
第一次:第一个数乘以第二个数乘以第三个数,结果记录为M(1);
第二次:第二个数乘以第三个数乘以第四个数,结果记录为M(2);
第三次:第三个数乘以第四个数乘以第五个数,结果记录为M(3);
…
第N-2次:第N-2个数乘以第N-1个数乘以第N个数,结果记录为M(N-2)。
最后计算M(1)+M(2)+M(3)......M(N-2)的数值。
找出一种排列方式使这个数值最大。
例如:N=4,4个正整数分别为1,2,3,4,那么排列方式就会有24种:
其中排列方式为1,3,4,2时,按照规则计算2次:1*3*4=12,3*4*2=24;乘积相加:12+24=36
这种排序方式是所有乘积相加的数值最大,为36。
输入描述:
输入N个正整数(3≤N),正整数之间一个英文逗号隔开
输出描述:
找出所有乘积相加的数值最大的排列方式,并输出数值
样例输入:
1,2,3,4样例输出:
36参考答案
#参考答案1
def dfs(t,f,a):
sum=0
if(t==len(x)):
ans=0
for i in range(0,len(x)-2):
ans+=(a[i]*a[i+1]*a[i+2])
return ans
for i in range(len(x)):
if(f[i]==0):
a[t]=x[i]
f[i]=1
sum=max(sum,dfs(t+1,f,a))
f[i]=0
return sum
x=input().split(',')
for i in range(len(x)):
x[i]=int(x[i])
flag=[0]*len(x)
flag2=[0]*len(x)
print(dfs(0,flag,flag2))
#参考答案2
max = 0
def run(l,r):
if len(l) > 0:
for i in range(len(l)):
l_t = l[:]
r_t = r[:]
item = l_t.pop(i)
r_t.append(item)
run(l_t[:], r_t[:])
else:
sum = 0
for i in range(len(r)-2):
sum += r[i]*r[i+1]*r[i+2]
global max
if sum > max:
max = sum
n = eval(input())
n = list(n)
run(n, [])
print(max)答案解析
评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据;
20分:能正确输出四组数据。
上一题
下一题