Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 동일한 제품을 가진 튜플을 찾는 프로그램

<시간/>

고유한 양수 값을 가진 배열 nums가 있다고 가정하고 a*b =c*d가 되도록 튜플 수(a, b, c, d)를 찾아야 합니다. 여기서 a, b, c, d는 nums의 요소입니다. , 그리고 모든 요소 a, b, c 및 d는 고유합니다.

따라서 입력이 nums =[2,3,4,6]과 같으면 (2,6,3,4), (2,6,4,3)과 같은 튜플을 얻을 수 있으므로 출력은 8이 됩니다. , (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입니다.
  • an:=0
  • 0에서 nums - 2 크기의 범위에 있는 i에 대해
    • i+1 ~ 숫자 크기 범위의 j에 대해
      • dic[nums[i]*nums[j]] :=dic[nums[i]*nums[j]] + 1
  • dic의 모든 값 목록에 있는 각 v에 대해 do
    • v가 1과 같으면
      • 다음 반복으로 이동
    • v:=v-1
    • s:=(v/2) * (8+8*v)
    • ans :=ans + s
  • 정수로 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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