测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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分:能正确输出四组数据。

上一题 下一题