const int diap = 3;
left_d = rand()%size;
while( left_d < size - diap ) left_d = rand()%size;
right_d = left_d + diap;
for(int i = 0; i < number_to_erase; ++ i) {
int pos = rand()%size;
if ((( pos >= left_d) && ( pos <= right_d)) && (array[pos] != 0))
array[pos] = 0;
}
Затереть элементы в массиве
Если никто ничего не понял. Нужно. Вместо 6-7 рандомно выбранных чисел поставить 0.
Цитата: DissDoc
Нужно. Вместо 6-7 рандомно выбранных чисел поставить 0.
Генеришь число - начало промежутка.
В цикле генеришь числа рандомно в интервале [0 . 8], (сперва заводишь массив булов для хранения инфы - был переписан i ый элемент или нет).
Если очередное сгенеренное число - разрешено к перезаписи И не переписано еще - переписываешь, и счетчик++, когда счетчик равен кол-ву элементов, разрешенных для перезаписи - выход.
Или я не так понял автора?
Я смутно вас понял честно говоря =) Но несмотря на это вы меня навели на мысль (есть дельные идеи). Постараюсь реализовать. Завтра выложу свой набросок ;)
Цитата: DissDoc
Вопрос - как рандомно мне стирать некоторые числа, при этом оставляя диапазон нетронутых 3 - 4 числа (причем тоже рандомно).
Один диапазон оставить или весь массив должен быть из диапазонов?
Код:
если должны выпадать числа равномерно, то делаем процедуру вырезания части чисел, смотрим, если нас массив удовлетворяет, то топаем дальше, иначе восстанавливаем массив и запускаем ещё раз. (hint: предварительно проверить можно вообще ли удалить заданное число чисел в массиве с сохранением требуемых свойств)
Цитата: DissDoc
Я смутно вас понял честно говоря =)
Ну не Макаренко я, признаюсь по секрету;). Ты выложи точное условие, и я постараюсь максимально точно сформулировать, ок?