นี่เป็นวิชาคณิตศาสตร์ที่ค่อนข้างซับซ้อน แต่น่าสนใจมาก (รู้จักกันในชื่อ"การแก้ปัญหา" )
และฉันต้องการให้คุณช่วยนำไปใช้
ลองนึกภาพเกมลอตเตอรีที่แต่ละตั๋วต้องเลือก 5 ตัวเลขสุ่มในชุดของ 50 หมายเลข (จาก 1 ถึง 50)
มันค่อนข้างง่ายที่จะทราบความน่าจะเป็นของตั๋วที่ชนะหรือความน่าจะเป็นที่จะมีตัวเลขที่ดี 1, 2, 3 หรือ 4
นอกจากนี้ยังค่อนข้างง่ายในการ "สร้าง" ตั๋วทั้งหมดที่มีหมายเลขที่ดี 1, 2, 3, 4
คำถามของฉัน (และการท้าทายรหัส) เกี่ยวข้องกับสิ่งนี้ แต่แตกต่างกันเล็กน้อย:
ฉันต้องการซื้อตั๋วลอตเตอรี (น้อยที่สุดเท่าที่จะเป็นไปได้) เช่นอย่างน้อยหนึ่งตั๋วของฉันมี 3 หมายเลขที่ดี
ท้าทาย
เป้าหมายของคุณคือการใช้โซลูชันทั่วไป (เป็นโปรแกรมหรือเพียงฟังก์ชั่น) เช่นนี้ในภาษาใด ๆ :
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
สำหรับตัวอย่างข้างต้นหนึ่งจะต้องโทร:
min_lottery_tickets(50, 5, 3)
และโปรแกรมจะสร้างชุดตั๋วที่เล็กที่สุดเพื่อเล่นเพื่อให้บรรลุเป้าหมายนี้
ตัวอย่าง:
min_lottery_tickets(10, 5, 2)
จะส่งออก 7 ตั๋วเช่นนั้น:
1 2 3 4 5
5 6 7 8 9
10 1 2 6 7
10 3 4 8 9
3 4 6 7 8
1 2 3 8 9
1 4 9 5 10
เพราะตั๋วดังกล่าวเพียงพอที่จะครอบคลุมหมายเลขใดก็ได้ตั้งแต่ 1 ถึง 10
เอาท์พุต
ข้อความหนึ่งบรรทัดต่อตั๋วตารางหรือช่องว่างระหว่างตัวเลข
ใครชนะ
โปรแกรมที่มีประสิทธิภาพสูงสุดชนะ (เช่นโปรแกรมที่สร้างตั๋วน้อยที่สุดสำหรับพารามิเตอร์ข้างต้น):
min_lottery_tickets(50, 5, 3)
ขอบคุณ!