![]() |
|
![]() ![]() ![]() |
|
Беспечный |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.3.2007 Где: Челябинск Репутация: нет Всего: нет |
Есть некий алгоритм генерации лицензионного ключа, состоящего из символьных блоков и содержащего некие случайные символы из заданного набора. Параметры генерации следующие:
1) количество блоков 2) размер блока 3) символ разделителя блоков (всегда присутствует) 4) набор символов, представляющий собой список флагов: upper case ("ABCD..."), lower case ("abcd..."), digits ("1234..."), symbols ("!@#$%*[];?()") 5) позиция статического блока 6) содержимое статического блока В пределах одного блока символы не повторяются. Для примера зададим следующие параметры: 1) 5 2) 4 3) "-" 4) upper case + digits 5) 1 6) "TEST" С этими параметрами генератор выдаст ключ, к примеру, такой: TEST-4D3G-PE8M-WDMO-IEU7 Этот алгоритм реализован, теперь нужен другой алгоритм, высчитывающий количество всех возможных вариантов лицензионных ключей при определенных параметрах. В комбинаторике не силен, поэтому требуется помощь ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Вычти из количества блоков количество статических блоков? получи количество генерируемых блоков K.
Посчитай длину словаря L. Пусть размер блока M. Тогда вариантов блока L! / (M! * (L-M)!) = Z Вариантов ключа - Z в степени K. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Беспечный |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.3.2007 Где: Челябинск Репутация: нет Всего: нет |
Если К - количество блоков без учета статического, а статический блок (если он задан) может быть только один, то сколько вариантов будет с учетом статического блока?
|
|||
|
||||
Беспечный |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.3.2007 Где: Челябинск Репутация: нет Всего: нет |
Реализовал подсчет - для проверки задаю такие параметры: кол-во блоков - 1, размер блока - 2, набор символов - только цифры. Нетрудно в уме посчитать, что при таком раскладе алгоритм должен выдавать 81 вариант: 90 двухсимвольных вариантов (от 10 до 99) за вычетом 9-ти повторяющихся (11, 22, 33, etc). Однако, формула возвращает мне значение 45... Похоже, здесь не берутся в расчет такие значения, как например 21 и 12. А мне они нужны.
|
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 2 Всего: 85 |
а почему варианты 01, 02, 03 и т.д. пропустили? они при таком раскладе также должны учитываться и это будет называться Размещение n!/(n-k)! = 10!/(10-2)! = 90 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |