Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm số phần tư mà tích của các cặp đầu tiên và cuối cùng giống nhau trong Python

Giả sử chúng ta có một danh sách các số được gọi là nums, với các số dương duy nhất là nums. Chúng ta phải tìm số lượng các phần tư như (a, b, c, d) từ các num sao cho a * b =c * d, a, b, c và d đều là các phần tử riêng biệt của nums.

Vì vậy, nếu đầu vào giống như nums =[3, 6, 4, 8], thì đầu ra sẽ là 8, bởi vì các phần tư là [[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]].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • c:=một bản đồ mới
  • n:=kích thước của nums
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • đối với j trong phạm vi i + 1 đến n - 1, thực hiện
      • x:=nums [i] * nums [j]
      • c [x]:=1 + (c [x] nếu có, nếu không thì 0)
  • ret:=0
  • đối với mỗi x trong danh sách tất cả các giá trị trong c, thực hiện
    • ret:=ret + x * (x - 1)
  • return ret * 4

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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

Đầu vào

[3, 6, 4, 8]

Đầu ra

8