Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนควอดรูเพิลที่ผลคูณคู่แรกและคู่หลังเท่ากันใน Python


คำอธิบายปัญหา

กำหนดลิสต์ nums ตัวเลขบวกไม่ซ้ำกัน หาจำนวน quadruple (a,b,c,d) ที่ต่างกันทั้งหมด และ a*b = c*d เรียงลำดับสำคัญ (a,b) และ (c,d) สลับได้

ตัวอย่าง

nums = [3, 6, 4, 8] → Output: 8

คู่ที่ให้ผลคูณ 24: (3,8) และ (4,6) → 8 แบบจัดเรียง

ขั้นตอนการแก้ปัญหา

  1. นับความถี่ของผลคูณทุกคู่ c[product] += 1
  2. สำหรับแต่ละผลคูณที่มี x คู่: จำนวนวิธีเลือก 2 คู่ = x * (x-1)
  3. แต่ละคู่จัดเรียงได้ 2 แบบ (a,b) และ (b,a) → คูณ 4
  4. ผลรวมทั้งหมด = sum(x*(x-1) for x in c.values()) * 4

การตนการทำงาน (Python)

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))  # Output: 8

อินพุต / เอาต์พุต

Input:  [3, 6, 4, 8]
Output: 8