0 / 0 / 0
Регистрация: 16.12.2012
Сообщений: 29
|
|
1 | |
Генерация уникальных чисел07.07.2013, 00:17. Показов 3217. Ответов 20
Метки нет Все метки)
(
0
|
|
07.07.2013, 00:17 | |
Ответы с готовыми решениями:
20
Подсчёт уникальных чисел в массиве
|
07.07.2013, 00:28 | 2 | |||||
Если чисел немного, то можно радномно генерировать и забивать в map, а потом смотреть - было оно, или нет. Большим map не должен получиться, т.к. числа генерируются равномерно на отрезке.
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
||||||
07.07.2013, 00:28 | 3 | |||||
Если от 1 до n, то
0
|
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
07.07.2013, 15:38 | 4 | |||||
0
|
07.07.2013, 15:44 | 5 |
Olivеr, не факт, что эта штука не зациклится. например, сгенерировав 99 чисел от 1 до 100, за исключением числа 42,
она будет бесконечно выполнять строчку unique_values.insert( distr(gen) ), пока функция distr(gen) не вернёт 42. А произойти это может и не очень то скоро. Добавлено через 1 минуту И кстати:
0
|
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
07.07.2013, 15:46 | 6 |
Kuzia domovenok, ну а какие еще варианты остаются?
Чтобы вероятность зацикливания была меньше нужно указывать больший диапазон Добавлено через 58 секунд chrono появился в C++11
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 15:48 | 7 |
Olivеr, а нельзя к примеру взять мой код сверху, но еще дополнительно умножить каждый элемент массива на случайное число?
0
|
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
07.07.2013, 15:52 | 9 |
Hrobak, нет
Ваш код генерирует числа от 1 до 20 и перемешивает их. Если умножать каждое число от 1 до 20 на случайное, то могут быть совпадения: 12*7=84 14*6=84
1
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 15:53 | 10 |
Olivеr, да, точно, не подумал.
Новый стандарт языка, 2008 студия не поддерживает
0
|
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
07.07.2013, 15:53 | 11 |
Kuzia domovenok, это новый стандарт С++
http://ru.wikipedia.org/wiki/C%2B%2B11
0
|
414 / 410 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
07.07.2013, 17:50 | 13 |
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 17:53 | 14 |
Tulosba, просто хотелось модифицировать код для случайных чисел от 1 до n для другого диапазона; я ступил и предложил умножать их на случайные.
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 20:00 | 16 |
Tulosba, не до конца понимаю как, можете привести пример?
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
07.07.2013, 20:24 | 17 | |||||
Hrobak, ну если мы говорим про модификацию Вашего кода, то так:
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 20:33 | 18 |
Tulosba, но ведь так у нас просто от -4 до 5 числа. Я имел в виду домножать, чтобы перейти к примеру к диапазону от 1 до 10000, как бы расширить его.
0
|
292 / 172 / 47
Регистрация: 22.03.2010
Сообщений: 488
|
|
07.07.2013, 23:44 | 20 |
Tulosba, изначально выбирается 20 чисел из диапазона 1..20. С этим проблем нет, мы просто записываем в массив 20 элементов последовательно и применяем std::random_shuffle. А я хотел, чтобы с помощью того же массива и std::random_shuffle генерить числа из бОльшего диапазона, например 1..10000.
0
|
07.07.2013, 23:44 | |
Помогаю со студенческими работами здесь
20
Отсортировать массив и подсчитать количество уникальных чисел в массиве Децентрализованная схема генерации уникальных чисел группой узлов
Генерация чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |