写点什么

Python 应用之寻求两个数对之间的最大乘积

作者:向阳逐梦
  • 2022 年 10 月 05 日
    四川
  • 本文字数:1286 字

    阅读完需:约 4 分钟

1.问题描述

两个数对 (a, b) 和 (c, d) 之间的 乘积差 定义为 (a * b) - (c * d) 。例如,(5, 6) 和 (2, 7) 之间的乘积差是 (5 * 6) - (2 * 7) = 16 。给你一个整数数组 nums ,选出四个 不同的 下标 w、x、y 和 z ,使数对 (nums[w], nums[x]) 和 (nums[y], nums[z]) 之间的 乘积差 取到 最大值 。返回以这种方式取得的乘积差中的最大值 。

输入:nums = [5,6,2,7,4]输出:34

解释:可以选出下标为 1 和 3 的元素构成第一个数对 (6, 7) 以及下标 2 和 4 构成第二个数对 (2, 4)乘积差是 (6 * 7) - (2 * 4) = 34。

2.解题思路

方法一

def PoorProduct(nums):    max_1 = max(nums)    nums.remove(max_1)    max_2 = max(nums)    min_1 = min(nums)    nums.remove(min_1)    min_2 = min(nums)    poorproduct = int(max_1) * int(max_2) - int(min_1) * int(min_2)    return poorproduct
a = input('请输入一组数字,中间用逗号隔开:')nums1 = a.split(',')nums=[]for i in nums1: nums.append(int(i))print(PoorProduct(nums))
复制代码

第 1 行: 定义函数 PoorProduct,用于返回最大乘积差

第 2-7 行: 使用 max 与 min 函数找出数组中的最大值、次大值、最小值以及次小值,并分别赋值给对应变量第 8-9 行: 计算最大乘积差并返回给函数

第 11 行: 使用 input 函数输入数组并提示用户中间用逗号隔开

第 12 行: 使用 split 函数,将逗号前后的字符串分别列出并作为元素放进列表中

第 13-15 行: 将列表 num1 中的元素全部转化为整数类型再存到新的列表 num 中

第 16 行: 计算数组最大乘积差

方法二

a = input('请输入一组数字,中间用逗号隔开:')nums1 = a.split(',')nums=[]for i in nums1:    nums.append(int(i))nums.sort()print(nums[-1]*nums[-2]-nums[0]*nums[1])
复制代码

第 1 行: 使用 input 函数输入数组并提示用户中间用逗号隔开

第 2 行: 使用 split 函数,将逗号前后的字符串分别列出并作为元素放进列表中

第 3-5 行: 将列表 num1 中的元素全部转化为整数类型再存到新的列表 num 中

第 6 行: 使用 sort 函数将列表中的整数从小到大重新排列

第 7 行: 打印数组最大乘积差

代码运行结果为:


这里用到了 remove 函数和 split 函数,简单讲解下这两个函数:

remove()函数

remove() 函数用于移除列表中某个值的第一个匹配项。

语法:list.remove(obj)

参数说明:obj -- 列表中要移除的对象。

例如:aList = [123, 'xyz', 'zara', 'abc', 'xyz'];aList.remove('xyz');print(aList):[123, 'zara', 'abc', 'xyz']默认删除列表中与参数对应的第一个元素

split()函数

split()函数可以将一个字符串分裂成多个字符串组成的列表。

语法:str.split(sep, maxsplit).

参数说明:sep 是分割符,不写分割符时表示所有的空字符,包括空格、换行(\n)、制表符(\t)等,有分隔符时,以该分隔符进行分割。maxsplit 是分割次数。

例如:L = '100 200 300\n400\t500'print(L.split())执行结果:['100', '200', '300', '400', '500']print(L.split(' ', 1))执行结果:['100', '200 300\n400\t500']

小思考

为什么方法一与方法二都需要下面这段代码?

nums=[]for i in nums1:    nums.append(int(i))
复制代码

如果删除这段代码,输出结果会有区别吗?为什么?

发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之寻求两个数对之间的最大乘积_Python语法_向阳逐梦_InfoQ写作社区