2012-04-13 3 views
0

Каким должен быть подход к генерации 10 уникальных номеров, которые не должны совпадать с группой сгенерированного ответа из 10 человек?Генерация случайных чисел

+1

Как насчет GUID? – cha0site

+0

Не допускается использование алфавитов или специальных символов, только с 0-9, а сумма из 10 случайных чисел должна быть минимальной. – Santosh

+3

GUID - это просто номер. Вы не видите _have_, чтобы отобразить его в шестнадцатеричном формате с разделением тире. – hammar

ответ

3

У этого есть хорошее решение. Я предполагаю, что вам приходится отбирать от 1 до 10 разных людей случайным образом (но принцип также работает, если у вас есть 10 (или более) разных, непоследовательных чисел).

  • Упорядочить числа в массиве.
  • Используйте алгоритм перетасовки, чтобы перетасовать элементы в массиве.
  • Прочитайте первые 10 значений из массива, присваивая их каждый из десяти людей.
1

Вы можете использовать объекты ОС для создания GUID (глобально уникальный идентификатор).

GUID - это 32-значный шестнадцатеричный код, который выглядит так: {21EC2020-3AEA-1069-A2DD-08002B30309D} (бесстыдно украден из GUID wikipedia article). Это делает его 128-битным числом. Теперь у него есть все эти раздражающие символы на пути, но нет ничего, что помешает вам удалить посторонний символ и преобразовать его из шестнадцатеричного и рассматривать его как простое число.

По практическим соображениям вы захотите отметить, что 128-битное число немного неудобно на некоторых языках, таких как C99. Но вы все равно можете использовать расширения компилятора (GCC имеет __uint128_t) или иметь дело с ним по-другому.

Смежные вопросы