สมมติว่าเรามีอาเรย์ที่มีตัวอักษรภาษาอังกฤษ n ตัวที่ต่างกัน เรายังมีค่า k อีกตัว เราสามารถเลือกดัชนี k ตัวที่ต่างกัน (1-indexed) ด้วยการกระจายแบบสม่ำเสมอ เราต้องหาความน่าจะเป็นที่ดัชนีที่เลือกอย่างน้อยหนึ่งดัชนีจะมีตัวอักษร 'a'
ตัวอย่างเช่น หาก letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'] และ k = 2 ผลลัพธ์จะเป็น 64.28% มีการจับคู่แบบ (1,2), (1,3) รวม 28 แบบ แต่มี 18 คู่ที่มี 'a' ดังนั้น 18/28 = 0.6428
ขั้นตอนการแก้ปัญหา
- contain := 0
- total := 0
- สำหรับแต่ละการจับคู่ c ของ letters ขนาด k:
- ถ้า "a" อยู่ใน c: contain := contain + 1
- total := total + 1
- คืนค่า contain/total
ตัวอย่างโค้ด
from itertools import combinations
def solve(letters, k):
contain = 0
total = 0
for c in combinations(letters, k):
if "a" in c:
contain += 1
total += 1
return contain/total
letters = ['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z']
k = 2
print(solve(letters, k))
อินพุต
['a', 'c', 'a', 'b', 'l', 'a', 'b', 'z'], 2
เอาต์พุต
0.6428571428571429