реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Раскидать случайные значения по массиву, никак не соображу
toweroff
сообщение Aug 25 2011, 17:28
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Нужно в массив [0..99] раскидать случайные неповторяющиеся значения в том же диапазоне [0..99]

Помнится, давным-давно, на какой-то лабе делал, а сейчас уже и не вспомню
Тогда все выглядело стройно и хорошо, а сейчас какие-то жуткие проверки уже есть/еще нет...

Подскажите, как это сделать красиво и просто


Нашел sm.gif

1. Сгенерировать массив из 100 последовательных чисел.
2. Брать первый элемент массива, генерить случайное число от 1 до 100, и менять местами первый элемент с элементом со случайно сгенерированным номером, и так далее
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 26 2011, 04:12
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(toweroff @ Aug 25 2011, 21:28) *
Нужно в массив [0..99] раскидать случайные неповторяющиеся значения в том же диапазоне [0..99]

Случайные значения не могут быть неповторяющимися, если они случайны, то повторяющиеся обязаны встречаться. И наоборот: если все значения неповторяющиеся, значит они не случайны.
А раскидать примерно так:
Код
int a[100];
int i;
srand(777);
for(i = 0; i < 100; ++i)
    a[i] = rand()*100/RAND_MAX;

ТОлько разобраться с разрядностью результатов.

Сообщение отредактировал 777777 - Aug 26 2011, 04:19
Go to the top of the page
 
+Quote Post
toweroff
сообщение Aug 26 2011, 07:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(777777 @ Aug 26 2011, 08:12) *
Случайные значения не могут быть неповторяющимися

наверное, я просто не так поставил задачу, отсюда и все мои потуги sad.gif
именно значения 0..99 в упорядоченном массиве раскидать случайным образом
как только у задачи условие было поставлено таким образом, все стало на свои места
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 26 2011, 10:29
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(toweroff @ Aug 26 2011, 11:10) *
наверное, я просто не так поставил задачу, отсюда и все мои потуги sad.gif
именно значения 0..99 в упорядоченном массиве раскидать случайным образом
как только у задачи условие было поставлено таким образом, все стало на свои места


А, понятно. Тогда предлагаю алгоритм: сначала заполняем каждый элемент массива его индексом, а потом в цикле от 0 до 99 i-й элемент меняешь местами с rand()-омным. Причем даже неважно будет ли он больше или меньше i.

Сообщение отредактировал 777777 - Aug 26 2011, 10:29
Go to the top of the page
 
+Quote Post
xemul
сообщение Aug 26 2011, 14:25
Сообщение #5



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Зачем доставать тяжёлую математику там, где достаточно рогатки из LFSR?
Код
uint8_t lfsr7(uint8_t); // любая реализация 7-битного LFSR

uint8_t b = SEED; // варианты получения случайного SEED (если оно надо) в конфе обсуждались

for(i=0; i<100;)
{
   if(b < 100) a[i++] = b;
   else if(b == 100) a[i++] = 0; // если в массиве нужен 0
   b = lfsr7(b);
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016