| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > (C++) srand(time(0)) |
| Автор: Natalka 7.12.2006, 19:29 |
| Здравствуйте!Может,кто знает,как сделать так,чтобы выведенные генератором случайных чисел числа были выведены только один раз и не повторялись? |
| Автор: mr.Anderson 7.12.2006, 19:50 |
| пропиши в начале кода randomize(); . |
| Автор: Dray 7.12.2006, 21:50 | ||
Ведь в заголовке темы почти правильно написано. |
| Автор: mr.Anderson 7.12.2006, 21:54 |
| Dray, просто в учебниках обычно пишут именно srand( time( 0 ) );. По своему опыту знаю. |
| Автор: Natalka 7.12.2006, 22:22 |
| 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; } } |
| Автор: Невермайнд 7.12.2006, 22:40 |
| А ты пропиши что если такое число есть то ренд еще раз |
| Автор: Partizan 8.12.2006, 07:34 |
| можно делать поиск в массиве и если значение повторяется то просто не записывать его.... есть много разных вариантов как можно эту задачу вообще рещить... |
| Автор: Dov 8.12.2006, 09:40 | ||
|
| Автор: Kuvaldis 8.12.2006, 10:54 |
| В одной умной книжке видел следующую мысль: ситуация, когда повторяются псевдослучайные числа, называется "неопределенная задержка" Если нужно получить все из диапазона, то очень возможен неприятный вариант с очень большим количеством повторений (10000 - диапазон, и нужно получить например, или 2 или 4, остальное выбрано) На сей случай предлагается такое решение. Без кода, идея: 1. заводим отсортированный массив (это недостаток, но все же) чисел диапазона 2. Генерируем число Е на шаге K 3. Совершаем ПЕРЕСТАНОВКУ элементов массива (Е, К) Степень "тасованности" массива в таком случае можно ограничивать количеством итераций (шагов) P.S. Достаточно эффективно я это когда-то использовал при моделировании раздачи карт в игре (они должны быть все разные, и за приемлемое время).Неприятно, когда сидишь 2 минуты и ждешь, когда сдадут предпоследнюю карту |
| Автор: Kuvaldis 8.12.2006, 11:10 |
| Не, я еще не выздоровел: промахнулся глазом мимо поста Dov |
| Автор: V.A.KeRneL 11.12.2006, 01:34 | ||||||||
Если бы мог, сделал бы Mayk'у ++ )) Имхо, это именно то, что надо! Узнал про ещё один «вкусный» метод C++ Усилилась и без того немалая радость от предвкушения того, что в следущем семестре наконец-то буду учить «Плюс»! Добавлено @ 01:47
Эффект, может и тот же, но: 1) во-первых, random_shuffle действительно пишеться в одну строчку; 2) во-вторых, он, наверняка, быстрее работает, т.к. содержится в стандартной библиотеке, а значит всячески оптимизирован; 3) ну и в-третьих, так писать вообще плохо:
Об этом во вех манах написано!.. Надо так:
|
| Автор: JackYF 11.12.2006, 16:02 |
Я думаю, что это наверное, правильней, но нужно его куда-нибудь в макрос или инлайн-функцию... Выглядит ужасно. Добавлено @ 16:04 И, кстати, работает медленней, что иногда тоже не самый последний фактор. |
| Автор: vinter 11.12.2006, 16:37 | ||||
это написано совершенно нормально и правильно, а вот это
изврат к тому же double тут вообще не причем, rand возвращает целое число.. |
| Автор: JackYF 11.12.2006, 17:18 | ||||
vinter,
Будет работать неверно, если n > RAND_MAX. А так как RAND_MAX на поверку (у меня) оказался не слишком большим (сколько точно - не помню), то некоторый смысл есть. а double там, наверное, действительно не нужен... да и скобок многовато:
Смотрится гораздо лучше. |
| Автор: vinter 11.12.2006, 17:32 | ||||
да, че то я притупил.. че то в слишком маленьком диапазоне, он генерирует... тогда лучше делать так
хотя я думаю, должен быть такой аналог и в языке, т.к rand() слишком стар для новых машин |
| Автор: V.A.KeRneL 16.12.2006, 00:32 | ||||||||
Я просто старался привести код максимально близкий к примеру из man'а.
Вообще, меня мой код
вполне устраивает и ничем не смущает; имхо, самое главное -- корректный. Скобочек ещё немного: «I love Scheme!» |