在Python中找到具有相同乘积的元组的程序
假设我们有一个唯一正值的数组nums,我们必须找到元素为nums的a、b、c、d的元组(a,b,c,d),使得ab = cd,其中所有元素a,b,c和d都是不同的。
因此,如果输入是像nums=[2,3,4,6],那么输出将是8,因为我们可以获得如(2,6,3,4),(2,6,4,3),(6,2,3,4),(6,2,4,3),(3,4,2,6),(4,3,2,6),(3,4,6,2),(4,3,6,2)的元组。
要解决此问题,我们将按照以下步骤操作−
- dic:=一个空映射,如果某个键不存在,则默认值为0
- ans:=0
- 对于i在0到nums大小-2的范围内,执行
- 对于j在i+1到nums大小的范围内,执行
- dic[nums[i]nums[j]]:=dic[nums[i]nums[j]]+1
- 对于j在i+1到nums大小的范围内,执行
- 对于dic的所有值的列表中的每个v,执行
- 如果v与1相同,则
- 进入下一个迭代
- v:=v-1
- s:=(v/2)(8+8v)
- ans:=ans+s
- 如果v与1相同,则
- 返回整数ans
例子
让我们看看以下实现,以获得更好的理解−
from collections import defaultdict
def solve(nums):
dic = defaultdict(int)
ans=0
for i in range(len(nums)-1):
for j in range(i+1,len(nums)):
dic[nums[i]*nums[j]]+=1
for v in dic.values():
if v==1:
continue
v=v-1
s=(v/2)*(8+8*v)
ans+=s
return int(ans)
nums=[3,4,6,2]
print(solve(nums))
输入
[3,4,6,2]
输出
0