이것은 다소 복잡하지만 매우 흥미로운 수학 주제입니다 ( "커버링 문제"라고 함 ).
그리고 그것을 구현하는 데 도움이 필요합니다.
복권 게임을 상상해보십시오. 각 티켓은 50 개의 숫자 세트 (1에서 50까지)에서 5 개의 난수를 선택해야합니다.
승차권의 가능성 또는 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)
감사!
관련 .
—
Peter Taylor
이 질문에는 다양한 설명이 필요합니다. 프로그램, 기능 또는 둘 중 하나를 수행하고 있습니까? 출력 형식이 중요합니까? 숫자를 1에서 색인화해야합니까, 아니면 0에서 색인화 할 수 있습니까? 그리고 객관적인 승리 조건은 무엇입니까?
—
Peter Taylor
@xem 이것은 대부분 Math SE에 속합니다. 그들은 아마도 당신에게 숫자가 당신에게 유리하지 않다는 것을 증명할 것입니다 (티켓 구매 가치가있는 대박 번호가 있지만)
—
Cruncher
좋은 숫자 는 무엇입니까 ?
—
DavidC
실제로 그러한 프로그램으로 티켓을 구매하면 많은 돈을 잃을 가능성이 있다고 확신합니다.
—
Michael Hampton