Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2014, 09:55   #1
KYZ
 
Регистрация: 09.10.2014
Сообщений: 4
По умолчанию Создать рандомный массив без повторений элементов

DevC++. Программа на Си. Хочу реализовать вариант, когда каждый раз при создании элемента массива функция пробегала массив сначала и искала совпадения. При нахождении совпадения элемент рандомизируется еще раз и так, пока совпадения не будут исключены.

Соответственно если рандомизация будет происходить в диапазоне от 0 до 20, то массив 7x3 должен получиться без повторений.

Не могу найти ошибки в коде. В массиве всегда присутствуют совпадения. В чем дело?

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define AMOUNT 21

int check(int voen[][3],int *i,int *j)
{
	int k,z;
	for(k=0;k<*i;k++)
        for(z=0;z<*j;z++)
 	if (voen[k][z]==voen[*i][*j]) return 1;
 	return 0;
}

int main()
{
    int voen[7][3],i,j;
    for(i=0;i<7;i++)
    for(j=0;j<3;j++)
    do voen[i][j]=rand()%AMOUNT;
    while(check(voen,&i,&j)==1);
    
    
    for(i=0;i<7;i++,printf("\n"))
    for(j=0;j<3;j++)
    printf("%8d",voen[i][j]);
    
  system("PAUSE");	
  return 0;
}

Последний раз редактировалось KYZ; 09.10.2014 в 09:58.
KYZ вне форума Ответить с цитированием
Старый 09.10.2014, 10:05   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Хватит фигнёй заниматься. Если тебе надо, чтобы в массиве были неповторяющиеся случайные элементы от 0 до N - 1, то:
1. заполнить массив элементами, значения которых равны индексу.
2. тщательно перемешать элементы перестановками (чем больше перестановок, тем круче).
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.10.2014, 10:21   #3
KYZ
 
Регистрация: 09.10.2014
Сообщений: 4
По умолчанию

Впоследствии мне необходимо будет накладывать много условий на "рандомизацию".
Потом каждый элемент будет не интом, а структурой, в которой будет много свойств, по которым будет определяться положение элемента. Например, некоторые элементы должны будут располагаться только в первом столбце, некоторые должны будут отсутствовать до определенной строки. При моем подходе достаточно будет лишь на этапе подбора и вставки элемента в массив добавить несколько условий и рандомизировать, пока все условия не будут выполнены.
Даже представить сложно как я буду прописывать эти условия при "перемешивании".
KYZ вне форума Ответить с цитированием
Старый 09.10.2014, 10:25   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Даже представить сложно как я буду прописывать эти условия при "перемешивании".
А и не надо.
Соблюди эти условия при заполнении массива, до перемешивания.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.10.2014, 10:36   #5
KYZ
 
Регистрация: 09.10.2014
Сообщений: 4
По умолчанию

А как тогда потом делать перестановки? Организовывать несколько перемешиваний для каждых "категорий" элементов (например, для каждого столбца по отдельности и так далее)?
KYZ вне форума Ответить с цитированием
Старый 09.10.2014, 10:45   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А как тогда потом делать перестановки? Организовывать несколько перемешиваний для каждых "категорий" элементов (например, для каждого столбца по отдельности и так далее)?
Как угодно. Зависит от постановки задачи.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.10.2014, 10:47   #7
KYZ
 
Регистрация: 09.10.2014
Сообщений: 4
По умолчанию

Спасибо, буду думать над этим вариантом исполнения
KYZ вне форума Ответить с цитированием
Старый 09.10.2014, 11:53   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

http://www.cplusplus.com/reference/a...andom_shuffle/
8Observer8 вне форума Ответить с цитированием
Старый 09.10.2014, 11:54   #9
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Программа на Си.
Не заметил
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СИ: Задан массив, состоящий из целых положительных и отрицательных чисел. Создать новый массив из положительных элементов старого Любимая Помощь студентам 0 28.05.2013 18:44
Получить массив из элементов, встречающихся в исходном массиве ровно один раз без повторений Shikarmo4000 Помощь студентам 0 25.05.2010 01:27
создать в файле рандомный двумерный массив loon Помощь студентам 2 25.06.2008 08:32
Массив без повторений Uzenec Помощь студентам 2 17.01.2008 08:23
Генерировать массив без повтора значений элементов. На (С.) Raptor Помощь студентам 5 17.12.2007 14:42