Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Раскидать случайные значения по массиву
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
toweroff
Нужно в массив [0..99] раскидать случайные неповторяющиеся значения в том же диапазоне [0..99]

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

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


Нашел sm.gif

1. Сгенерировать массив из 100 последовательных чисел.
2. Брать первый элемент массива, генерить случайное число от 1 до 100, и менять местами первый элемент с элементом со случайно сгенерированным номером, и так далее
777777
Цитата(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;

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

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


А, понятно. Тогда предлагаю алгоритм: сначала заполняем каждый элемент массива его индексом, а потом в цикле от 0 до 99 i-й элемент меняешь местами с rand()-омным. Причем даже неважно будет ли он больше или меньше i.
xemul
Зачем доставать тяжёлую математику там, где достаточно рогатки из 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);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.