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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2015, 16:56   #1
Silveronn
Новичок
Джуниор
 
Регистрация: 20.05.2015
Сообщений: 1
По умолчанию Перемешивание двумерного массива несколько раз без повторений

Здравствуйте!
Никак не могу понять, как в C++ Билдере перемешать двумерный массив несколько раз так, чтобы значения в строках не попадали туда второй раз.

Объясню визуально.
(Я использую StringGrid)

Допустим, изначально имеются данные в массиве:
Цитата:
А Маша Таня Петя Коля Семён
Б Настя Виктор Николай Вова Инна
В Антон Надежда Дима Артур Вероника
Г Ирина Алексей Степан Елена Фома
Д Миша Матвей Олеся Володя Аня
Затем, нажатием кнопки "Перемешать" я перемешиваю значения от 1 до 25 случайным образом внутри таблицы (А-Д при этом всегда должны оставаться на местах):

Цитата:
А Матвей Виктор Дима Артур Фома
Б Петя Коля Семён Володя Аня
В Маша Таня Олеся Миша Олеся
Г Настя Николай Вова Инна Надежда
Д Степан Елена Антон Ирина Вероника
То есть в строке "А" ставятся 5 значений, которые в ней ещё не стояли, и т.д. В каждой строке при каждой новой генерации значения не должны стоять в строке второй раз.


Мне нужно пройти все 5 кругов, чтобы при каждой новой генерации перемешались значения, которые в этой строке еще ни разу не были.

Вот код кнопки перемешивания:

Код:
Randomize();
srand(time(NULL));
int t_row, t_column;
String tmp;
	for(int row = 1; row <= 5; row++)
	{
	     for(int column = 0; column <= 4; column++)
		{
			tmp=StringGrid1->Cells[row][column];
			t_row=rand() % 5+1;
			t_column=rand() % 4;
			StringGrid1->Cells[row][column]=StringGrid1->Cells[t_row][t_column];
			StringGrid1->Cells[t_row][t_column]=tmp;
		}
	}
Перемешивает значения внутри таблицы, не трогая А-Д. Но вот значения могут вставать второй раз в строку.

Я уже пробовал создавать второй двумерный массив, где в качестве строк выступали значения первого массива внутри таблицы, а в качестве значений -- кто в какой строке уже побывал, чтобы при повторном рандоме туда больше не вставать. Но это не сработало.


Помогите дописать код так, чтобы все 5 генераций проходили без повторений -- в каждой строке (А-Д) каждое значение должно побывать только 1 раз...

Последний раз редактировалось Silveronn; 20.05.2015 в 16:59.
Silveronn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемешивание двухмерного массива stenl1 Общие вопросы C/C++ 10 22.11.2016 06:26
Вопрос про случайное перемешивание массива Debauchee Помощь студентам 6 20.02.2015 10:49
Перемешивание массива revaldo666 Общие вопросы C/C++ 6 19.01.2011 15:04
Наш, несколько раз банкротившийся, банк Тарханы - позволяет пополнять яндекс деньги кошелек без комиссии. Alar Свободное общение 0 01.10.2010 07:33
Получить массив из элементов, встречающихся в исходном массиве ровно один раз без повторений Shikarmo4000 Помощь студентам 0 25.05.2010 01:27