![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Natalka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.12.2006 Где: Днепродзержинск Репутация: нет Всего: нет |
Здравствуйте!Может,кто знает,как сделать так,чтобы выведенные генератором случайных чисел числа были выведены только один раз и не повторялись?
|
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
пропиши в начале кода randomize(); .
|
|||
|
||||
| Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Ведь в заголовке темы почти правильно написано. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Dray, просто в учебниках обычно пишут именно srand( time( 0 ) );. По своему опыту знаю.
|
|||
|
||||
| Natalka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 7.12.2006 Где: Днепродзержинск Репутация: нет Всего: нет |
randomize() не работает
Я делаю в Visual C++ генерирует случайное число каждый раз в разном порядке,но числа иногда повторяются. Нужно исключить повторение чисел. #include "stdafx.h" #include <ctime> using namespace std; void main() { srand(time(0)); const int n=10; int a[n]; cout<<"Chisla ot 1 Do 10 :"<<endl; for (int i=0; i<n; i++) { a[i]=rand()%10+1; cout<<a[i]<<endl; } } |
|||
|
||||
| Невермайнд |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 26.10.2006 Где: Киев Репутация: нет Всего: нет |
А ты пропиши что если такое число есть то ренд еще раз
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
можно делать поиск в массиве и если значение повторяется то просто не записывать его....
есть много разных вариантов как можно эту задачу вообще рещить... -------------------- СУВ, Partizan. |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
В одной умной книжке видел следующую мысль:
ситуация, когда повторяются псевдослучайные числа, называется "неопределенная задержка" Если нужно получить все из диапазона, то очень возможен неприятный вариант с очень большим количеством повторений (10000 - диапазон, и нужно получить например, или 2 или 4, остальное выбрано) На сей случай предлагается такое решение. Без кода, идея: 1. заводим отсортированный массив (это недостаток, но все же) чисел диапазона 2. Генерируем число Е на шаге K 3. Совершаем ПЕРЕСТАНОВКУ элементов массива (Е, К) Степень "тасованности" массива в таком случае можно ограничивать количеством итераций (шагов) P.S. Достаточно эффективно я это когда-то использовал при моделировании раздачи карт в игре (они должны быть все разные, и за приемлемое время).Неприятно, когда сидишь 2 минуты и ждешь, когда сдадут предпоследнюю карту Это сообщение отредактировал(а) Kuvaldis - 8.12.2006, 11:08 -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Не, я еще не выздоровел: промахнулся глазом мимо поста Dov
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
[/quote] можно заменить на std::random_shuffle(a,a+n); Эффект - тот же, но рандом_шаффл пишеться в одну строчку -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| V.A.KeRneL |
|
||||||||
![]() Vadim A. Kazantsev ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 3.12.2006 Где: Moscow, Russia Репутация: 1 Всего: 14 |
Если бы мог, сделал бы Mayk'у ++ )) Имхо, это именно то, что надо! Узнал про ещё один «вкусный» метод C++ Усилилась и без того немалая радость от предвкушения того, что в следущем семестре наконец-то буду учить «Плюс»! Добавлено @ 01:47
Эффект, может и тот же, но: 1) во-первых, random_shuffle действительно пишеться в одну строчку; 2) во-вторых, он, наверняка, быстрее работает, т.к. содержится в стандартной библиотеке, а значит всячески оптимизирован; 3) ну и в-третьих, так писать вообще плохо:
Об этом во вех манах написано!.. Надо так:
Это сообщение отредактировал(а) V_A_KeRneL - 11.12.2006, 04:45 -------------------- «C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы» ---/)/)---(\.../)---(\(\ --(':'=)---(=';'=)---(=':') (")(")..)-(").--.(")-(..(")(") |
||||||||
|
|||||||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Я думаю, что это наверное, правильней, но нужно его куда-нибудь в макрос или инлайн-функцию... Выглядит ужасно. Добавлено @ 16:04 И, кстати, работает медленней, что иногда тоже не самый последний фактор. |
|||
|
||||
| vinter |
|
||||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
это написано совершенно нормально и правильно, а вот это
изврат к тому же double тут вообще не причем, rand возвращает целое число.. |
||||
|
|||||
| JackYF |
|
||||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
vinter,
Будет работать неверно, если n > RAND_MAX. А так как RAND_MAX на поверку (у меня) оказался не слишком большим (сколько точно - не помню), то некоторый смысл есть. а double там, наверное, действительно не нужен... да и скобок многовато:
Смотрится гораздо лучше. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |