Недавно я читал о лото и создании комбинаций. Я подумал, что мне это удастся, и посмотрел, например, код. Мне удалось собрать воедино цифровое колесо на основе некоторого VB, но я привел интересную ошибку при его портировании.
http://www.xtremevbtalk.com/showthread.php?t=168296
Позволяет идентифицировать любую комбинацию. Вы кормите его N числами, K выбирает и индекс, и он возвращает эту комбинацию в лексикографическом порядке.
Он хорошо работает при низких значениях, но с ростом количества шаров (N) я получаю дополнительные числа, например. 40 шаров, 2 кирки. Комбинация № 780 Возвращает 40 и 41! Чем больше пиков и чисел я добавил, тем выше это становится. Кажется, это происходит в конце цикла, когда предшествующее число связано с циклом.
Я обнаружил, что метод генерации числа возможных комбинаций на форуме VB не имеет большого смысла, поэтому я нашел более простой:
http://www.dreamincode.net/code/snippet2334.htm
Затем я обнаружил, что использование удваивается, кажется, вызывает отсутствие разрешения. Используя длинные работы, но теперь я не могу использовать более высокие значения N, потому что умножение выходит за пределы диапазона на долгое время! Затем я попробовал ulong и decimal, которые не могли пройти намного больше 26-28 чисел (N).
Поэтому я вернулся к версии на сайте VB.
http://www.xtremevbtalk.com/showthread.php?s=6548354125cb4f312fc555dd0864853e&t=129902
Код представляет собой метод, позволяющий избежать превышения 96-битного потолка, и утверждает, что может рассчитывать до N 98, K 49.
По какой-то причине я не могу заставить себя так себя вести, он выплевывает некоторые очень странные цифры.
Пройдя некоторое время, я решил перечитать предложенную вики. Хотя большая часть этого была над моей головой, я смог обнаружить, что некоторые способы вычисления биномиального коэффициента имеют неточность. Это не подходит для системы, в которой вы, по сути, подключаетесь к игре. После небольшого поиска и чтения я наткнулся на это:
http://dmitrybrant.com/2008/04/29/binomial-coefficients-stirling-numbers-csharp
Оказывается, это именно та информация, которую я искал! Первый метод точный и достаточно быстрый для всего, что я делаю. Большое спасибо за то, что psYchotic собирается присоединиться, чтобы опубликовать здесь!