Bu oldukça karmaşık ama çok ilginç bir matematik dersi ( "örtme problemi" olarak bilinir ),
Ve bunu uygulamak için yardımınızı istiyorum.
Her bir biletin 50 sayıdan oluşan bir sette (1'den 50'ye kadar) 5 rastgele sayı seçmesi gereken bir piyango oyunu düşünün.
Kazanan bir bilet olasılığını veya 1, 2, 3 veya 4 iyi sayıya sahip olma olasılığını bilmek oldukça kolaydır.
1, 2, 3, 4 iyi sayıya sahip tüm biletleri "oluşturmak" da oldukça kolaydır.
Sorum (ve kod sorma) bununla ilgili, ancak biraz farklı:
Bazı piyango bileti almak istiyorum (mümkün olan en az), biletlerimden en az birinin 3 iyi numarası var.
Meydan okuma
Amacınız, herhangi bir dilde genel bir çözümü (bir program veya sadece bir işlev olarak) uygulamaktır:
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
Yukarıdaki örnek için, sadece aramak gerekir:
min_lottery_tickets(50, 5, 3)
ve program bu hedefe ulaşmak için en küçük bilet setini oluşturacak.
Misal:
min_lottery_tickets(10, 5, 2)
7 bilet çıktı:
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
çünkü bu tür biletler 1'den 10'a kadar olan herhangi bir sayıyı karşılamak için yeterlidir.
Çıktı
Metin, bilet başına bir satır, sayılar arasındaki tablolar veya boşluklar
kim kazanır
En verimli program kazanır (yani yukarıdaki parametreler için en az bilet üreten program):
min_lottery_tickets(50, 5, 3)
Teşekkürler!