Giả sử chúng ta có một dãy num với các giá trị dương duy nhất, chúng ta phải tìm số bộ giá trị (a, b, c, d) sao cho a * b =c * d trong đó a, b, c và d là các phần tử của nums và tất cả các phần tử a, b, c và d đều khác biệt.
Vì vậy, nếu đầu vào là nums =[2,3,4,6], thì đầu ra sẽ là 8 vì chúng ta có thể nhận được các bộ giá trị như (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).
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- dic:=một bản đồ trống, giá trị mặc định là 0 nếu không có khóa nào đó
- ans:=0
- đối với tôi trong phạm vi từ 0 đến kích thước là nums - 2, thực hiện
- đối với j trong phạm vi i + 1 đến kích thước là num, thực hiện
- dic [nums [i] * nums [j]]:=dic [nums [i] * nums [j]] + 1
- đối với j trong phạm vi i + 1 đến kích thước là num, thực hiện
- đối với mỗi v trong danh sách tất cả các giá trị của dic, hãy thực hiện
- nếu v giống 1, thì
- chuyển sang lần lặp tiếp theo
- v:=v-1
- s:=(v / 2) * (8 + 8 * v)
- ans:=ans + s
- nếu v giống 1, thì
- trả về ans dưới dạng số nguyên
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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))
Đầu vào
[3,4,6,2]
Đầu ra
0