首页 > 其他分享 >寻求两个数对之间的最大乘积

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

时间:2022-10-20 21:00:36浏览次数:39  
标签:min 函数 nums max 数对 列表 寻求 split 乘积

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))

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

标签:min,函数,nums,max,数对,列表,寻求,split,乘积
From: https://blog.51cto.com/u_15641375/5780562

相关文章

  • 【算法】求解满足条件整数对(C++源码)
    【算法】求解满足条件整数对(C++源码)​​一、问题描述​​​​二、输入描述​​​​三、输出描述​​​​四、步骤描述​​​​五、运行结果截图​​​​六、源代码(C++)​​一......
  • 【LeetCode】1512.好数对的数目(C++)
    1512.好数对的数目(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​3解题提示​​​​4源码详解(C++)​​1题目描述......
  • 【LeetCode】1464. 数组中两元素的最大乘积(C++)
    1464.数组中两元素的最大乘积(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​3解题思路​​​​4源码详解(C++)​​......
  • 函数对象与闭包函数与装饰器
    目录一.global与nonlocal二.函数名的多种用法1.可以当做变量名赋值2.可以当做函数的参数3.可以当做函数的返回值4.可以当做容器类型的数据三.闭包函数四.装饰器1.装饰器简......
  • 1275:【例9.19】乘积最大
    题目链接题意简述设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积最大。同时,为了帮助选手能够正确理解题意,主持人还举......
  • P1102 A-B 数对
    A-B数对题目描述给出一串正整数数列以及一个正整数\(C\),要求计算出所有满足\(A-B=C\)的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格式输入共两行......
  • 求十个数的乘积
    文字描述:①输入两个数i、n②用i表示相乘的次数,初始值为1,此时n也为1③若i<=10,转为第④步,否则转为第⑦步④将n和i相乘,为n⑤此时i+1,为i⑥返回第③步⑦输出n,此时n为十......
  • 函数和虚函数对struct结构体大小的影响
    编者:李国帅时间:20背景:在网络传输程序中,往往把数据封装到结构体中统一传输,这时候,结构体的大小就会很重要,不注意的话,容易造成数据的丢失或者溢出。在实际的使用中要注意分析V......
  • 树状数组-归并排序-逆序对-2426. 满足不等式的数对数目
    问题描述给你两个下标从0 开始的整数数组 nums1和 nums2 ,两个数组的大小都为 n ,同时给你一个整数 diff ,统计满足以下条件的 数对 (i,j) :0<=i<j<=n-......
  • *洛谷 P1018 [NOIP2000 提高组] 乘积最大(dfs+高精度)
    说在前头此篇题解是记录自己的暴力写法,并不能100分满分通过洛谷测试数据(只有60)纯纯记录写法而写https://www.luogu.com.cn/problem/P1018我还说这么简单呢这题,想太......