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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2017, 20:13   #1
OR1GAMI
 
Регистрация: 20.10.2017
Сообщений: 3
По умолчанию Заполнить матрицу уникальными случайными числами. Помогите правильно составить алгоритм кода. С++

Задача состоит вот в чем: надо заполнить ДВУМЕРНЫЙ массив УНИКАЛЬНЫМИ случайными числами (чтобы числа не повторялись).
С одномерным все довольно просто так как там одна строчка, а вот с двумерным у меня возникли проблемы, вот код, первая строка заполняется уникальными, но при окончании итерации цикла отвечающего за строки, когда переходит на новую строку, он не сравнивает с предыдущим элементом (тот который в первой строке), кто знает ответьте. Спасибо!

#include<iostream>
#include<ctime>
using namespace std;

void main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));

const int ROWS = 3;
const int COLS = 3;
int arr[ROWS][COLS];
bool alreadyThere;

for (int i = 0; i < ROWS; )
{
for (int j = 0; j < COLS; )
{
alreadyThere = false;
int newRandomValue = rand() % 20;

for (int y = 0; y < j; y++)
{

if (arr[i][y] == newRandomValue)
{
alreadyThere = true;
break;
}
}

if (alreadyThere != true)
{
arr[i][j] = newRandomValue;
j++;
}
}
i++;
}

for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
}
OR1GAMI вне форума Ответить с цитированием
Старый 23.11.2017, 23:17   #2
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Задачка мозголомная
Код:
for (проход по матрице)
  for (проход по строке) {
    Flag=0; //Флаг для выхода из цикла
    while (!Flag) {
      Создаём новое число и записываем в текущий элемент
      for (проход по матрице до текущей строки)
        for (проход по строке до конца или до текущего символа) {
          Если найдено совпадение прерываем оба цикла
        }
      Если счётчики циклов указывают на текущй элемент,
      значит он оригинален и поднимаем Flag
    }
  }
Можно схалявничать
- работать как с одномерным массивом
- заполнить нулями и новый элемент проверять циклами которые проходят по всему массиву

Можно ещё сделать функцию, которая принимает указатель на строку матрицы, проверяемую длину и проверяемый элемент. Тогда цикл проверки будет отделён от цикла создания и не так сильно будет выкручивать мозг.
СтудПом вне форума Ответить с цитированием
Старый 24.11.2017, 08:54   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Like this?

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 24.11.2017, 09:52   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от OR1GAMI Посмотреть сообщение
Задача состоит вот в чем: надо заполнить ДВУМЕРНЫЙ массив УНИКАЛЬНЫМИ случайными числами (чтобы числа не повторялись).
согласен с min@y™ - можно заполнить матрицу числами подряд, потом перемешать.

или, можно ещё так - у Вас матрица 3X3, а случайные числа от 0 до 20

поступаем так.
1) заполняем одномерный массив a[20] числами от 0 до 20
2) перемешиваем массив (см. на форуме тему "как не надо тасовать карты", например, тыц) или банальным std::shuffle()
3) заполняем матрицу в циклах по строкам/столбцам беря значения по порядку из перемешанного массива.
всё.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Помогите заполнить матрицу случайными числами bekabeka Помощь студентам 1 03.03.2017 12:09
Заполнить матрицу случайными числами... DashGames Паскаль, Turbo Pascal, PascalABC.NET 2 12.02.2014 22:13
задача на паскале: Матрицу размером 10Х10 заполнить случайными трехзначными числами. Отсортировать по строкам. докторлинус Помощь студентам 8 29.10.2013 09:45
заполнить очередь случайными числами(кусок кода есть) Teropan231 Помощь студентам 3 11.10.2013 23:46
получить прямоугольную матрицу A,заполнить натуральными случайными числами, записать наибольший общий делитель двух чисел! AntonKalinin01 Помощь студентам 0 26.05.2013 07:07