Здравствуйте, Caracrist, Вы писали:
C>Здравствуйте, sdf, Вы писали:
sdf>>Генерировать случайные 10-тизначных номера, каждый проверять на существование. Примерно в районе первой сотни будет сгенерирован существующий случайный номер.
C>Верно! Забыл упомянуть: 10-тизначное число можно сгенерировать лишь однажды. Типа лотерея такая. По телеку сто раз шарики тянуть никто не собирается...
1. Сгенерировать 10-тизначное число [N1...N10]
2. Проверить, есть ли паспорт с таким номером. Если есть — конец
3. Путем последовательной замены цифр выпавшего числа и проверки на существование паспорта с таким номером, собрать все паспорта, отличающиеся от выпавшего числа на 1 в одном из знаков. Если кандидатов несколько — выбрать из них одного случайно или по заданной процедуре, например:
— приоритет получает номер, у которого отличается младший разряд, например [N1...(N10+1)] предпочительнее чем [N1...(N9+1) N10]
— при равенстве номера отличающегося разряда, приоритет получает меньший номер, т.е. [N1...(N9-1) N10] предпочительнее чем [N1...(N9+1) N10]
4. Если в п.3 ни одного паспорта не найдено, аналогично ищутся все паспорта отличающиеся на 2 в одном разряде, на 3 и т.д. ... потом в двух разрядах и т.д. до нахождения победителя, что неизбежно.
Таким образом, генерируется одно число, но используются дополнительные правила для разрешения коллизий при неточным попадании.
Показывать людям можно уже номер выбранного паспорта

.