刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

编程实现:

有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

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```pythondef max_product_sum(numbers):n = len(numbers)# 使用动态规划的思想dp = [0] * ndp[0] = dp[1] = numbers[0]for i in range(1, n):for j in range(i):# 更新最大乘积dp[i] = max(dp[i], dp[j] * numbers[i])# 计算乘积和product_sum = 0for i in range(n-2):product_sum += dp[i] * dp[i+1]return product_sum# 输入样例numbers = list(map(int, input().split(',')))print(max_product_sum(numbers))```

解析:

【喵呜刷题小喵解析】:

题目要求找到一种排列方式,使得所有乘积相加的结果最大。

一种思路是使用动态规划。定义一个长度为n的数组dp,其中dp[i]表示前i个数的最大乘积。初始时,dp[0]和dp[1]分别设为第一个数和第二个数。

对于每个i,我们遍历j从0到i-1,更新dp[i]为dp[j] * numbers[i]和dp[i]的较大值。这样,dp[i]就表示了前i个数的最大乘积。

最后,我们计算乘积和,即M(1)+M(2)+...+M(n-2),其中M(i)为dp[i] * dp[i+1]。

对于输入样例1,2,3,4,按照上述思路,可以得到最大乘积和的排列方式为1,2,4,3,乘积和为36。
创作类型:
原创

本文链接:编程实现: 有N个正整数,现对N个正整数进行不同方式的排列,每次排列后都会按照以下规则进行一次计算,

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share