给定,n,个正整数数列,进行如下操作:每次删去两个数,a,和,b,添,加一个数,a*b+1,直到只剩一个数,N,在所,有这样的,N,中,有一个最大,Max,和最小,Min,M=Max-Min,是极差。用python实现
时间: 2023-10-01 13:05:55 浏览: 121
思路:
可以使用堆来实现。每次取出堆中的最小值和次小值,计算它们的乘积,并将结果加入堆中。重复该过程直到只剩下一个数,即为最终结果。
代码实现:
```python
import heapq
def get_extreme(nums):
heap = nums[:]
heapq.heapify(heap)
while len(heap) > 1:
a = heapq.heappop(heap)
b = heapq.heappop(heap)
heapq.heappush(heap, a * b)
return heap[0]
n = int(input())
nums = list(map(int, input().split()))
max_num = get_extreme(nums)
min_num = get_extreme([-num for num in nums])
m = max_num - (-min_num)
print(m)
```
示例:
输入:
```
5
2 3 4 5 6
```
输出:
```
24
```
解释:
首先,将列表转化为堆,堆中的元素为 [2, 3, 4, 5, 6]。
第一次操作,取出最小值 2 和次小值 3,计算它们的乘积得到 6,并将 6 加入堆中,堆中的元素变为 [4, 5, 6, 6]。
第二次操作,取出最小值 4 和次小值 5,计算它们的乘积得到 20,并将 20 加入堆中,堆中的元素变为 [6, 6, 20]。
第三次操作,取出最小值 6 和次小值 6,计算它们的乘积得到 36,并将 36 加入堆中,堆中的元素变为 [20, 36]。
最终结果为 36。
最大值为 6*5=30,最小值为 (-2)*(-3)=6,极差为 30-6=24。
阅读全文