2017-02-06 6 views
2

В настоящее время я пытаюсь заполнить 2D-массив 16 значениями от 1 до 16. Я хочу заполнить массив не повторяющимися случайными значениями.Заполнить 2D-массив не повторяющимися случайными числами

Например, если у меня есть массив int array[4][4], как бы я прошел цикл, заполняющий массив, проверяя, чтобы другое идентичное случайное значение не было помещено в другое место в массиве?

+0

, что является самым высоким размер? –

ответ

3
int array[4][4]; 
int* p = &array[0][0]; 
std::iota(p, p+16, 1); 

std::random_device r; 
std::default_random_engine g(r()); 
std::shuffle(p, p+16, g); 
+0

Это отлично поработало, спасибо. – Xankar

0

Использовать int randomValue = rand()% 16 + 1; и сохраните его в другом вспомогательном 2D-массиве для проверки цели. вам нужно сделать.

0

Создайте 1-мерный массив, скажем arr размера 16, заполните его значениями от 1 до 16. Использовать shuffle на arr. Пройдите через массив, чтобы заполнить 2-мерный массив, скажем arr2.

for(int i = 0; i < 16; i++){ 
    arr2[i/4][i%4] = arr[i]; 
} 
+0

Это тоже то, что мне нужно. Большое спасибо. – Xankar

Смежные вопросы