在Python中查找第一对和最后一对的乘积相同的四元组的程序

在Python中查找第一对和最后一对的乘积相同的四元组的程序

假设我们有一个名为nums的数字列表,其中nums是唯一的正数。我们必须从nums中找到像(a,b,c,d)这样的四元组,使得a * b = c * d,a,b,c和d都是nums的不同元素。

因此,如果输入为nums = [3, 6, 4, 8],那么输出将为8,因为四元组为[[3,8,6,4],[3,8,4,6],[8,3,6,4],[8,3,4,6],[6,4,3,8],[4,6,3,8],[6,4,8,3],[4,6,8,3]]。

为了解决这个问题,我们将遵循以下步骤:

  • c := 一个新的映射
  • n := nums的大小
  • 对于i从0到n-1个元素,做如下循环:
    • 对于j从i + 1到n-1个元素,做如下循环:
      • x := nums[i] * nums[j]
      • 如果c[x]存在,就将其值加1,否则将其值设为0
  • 将ret的值初始化为0
  • 对于c中的所有值的列表中的每个x, 做如下循环:
    • ret := ret + x * (x – 1)
  • return ret * 4

例子

让我们看看以下实现来更好地理解 –

def solve(nums):
   c = {}
   n = len(nums)
   for i in range(n):
      for j in range(i + 1, n):
         x = nums[i] * nums[j]
         c[x] = c.get(x, 0) + 1
   ret = 0
   for x in c.values():
      ret += x * (x - 1)
   return ret * 4

nums = [3, 6, 4, 8]
print(solve(nums))

输入

[3, 6, 4, 8]

输出

8

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程