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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 14:12   #1
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
Вопрос Массив с рандомными числами С++

Здравствуйте.Помогите создать двухмерный массив(4x4) int с цифрами от 1 до 16 так, чтоб цифры были раскиданы произвольно, но не повторялись... В голове возникло 2 варианта но не один пока не смог реализовать:
1. создать массив от 0 до 15 и перемешать цифры.
2. использовать функцию rand но избавиться от повтора одинаковых чисел.

Помогите кодом кто может...
Arrioh вне форума Ответить с цитированием
Старый 30.03.2012, 14:26   #2
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

А если со списком сделать?

Вот что-то наподобии этого (в псевдокоде правда, почти..), но идея надеюсь понятна:
Код:
for (i=0; i< count; i++)
{
list->add(arr[i]);
arrCopy[i] = 0;
}

i=0;
while (size(list) >0)
{
int ii = rand()%count;
arrCopy[i] = list(ii);
list[ii]->delete();
i++;
}
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 30.03.2012, 20:58   #3
Крот
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 57
По умолчанию

Код:
	int arr[4][4] = { 0 };
	int row, col;

	srand(time(NULL));

	for (int n=1; n<=16; n++)
	{
		do
		{
			row = rand() % 4;
			col = rand() % 4;
		} while (arr[row][col] != 0);

		arr[row][col] = n;
	}
При создании массива он весь заполняется нулями а потом в цикле от 1 до 16 выбирается случайная ячейка и если в ней не ноль, то записать число.

Последний раз редактировалось Крот; 30.03.2012 в 21:08.
Крот вне форума Ответить с цитированием
Старый 11.04.2012, 12:21   #4
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию

Крот, попробовал реализовать вашим способом и столкнулся со следующей проблемой - последние цифры массива, в результате, приобретают мусорные значения типа "87417621652". Только последние 5. С первыми 11 все в норме...
Цитата:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string.h>

using namespace std;


// shuffle numbers

int main()
{
int arr[4][4] = {0};
int row, col;

srand(time(NULL));

for ( int n=1; n<16; n++)
{
do
{
row = rand() % 4;
col = rand() % 4;
} while (arr[row][col] != 0);

arr[row][col] = n;

}
for(int i=1;i<=4;i++)
{
for(int a=1;a<=4;a++)
cout<<arr[i][a]<<endl;
}

}
Arrioh вне форума Ответить с цитированием
Старый 11.04.2012, 14:08   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Arrioh

Здравствуйте.Помогите создать двухмерный массив(4x4) int с цифрами от 1 до 16 так, чтоб цифры были раскиданы произвольно, но не повторялись...

Код:
int arr[4][4];
int n = 1;
for (int* it=&arr[0][0]; it != &arr[0][0] + 4*4; it++)
  *it = n++;
std::random_shuffle(&arr[0][0], &arr[0][0] + 4*4);
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить одномерный массив случайными числами. С++ JustKaissy Помощь студентам 7 27.09.2011 11:49
Заполнить массив случайными числами. Fender92 Паскаль, Turbo Pascal, PascalABC.NET 4 19.03.2011 17:05
заполнить массив случайными вещественными числами (C#) _RaWeN_ Общие вопросы C/C++ 2 14.03.2011 19:02
Как заполнить массив вещественными числами new-in-c Общие вопросы C/C++ 1 03.05.2010 10:54
Заполнить массив случайными числами forumu Общие вопросы Delphi 13 03.12.2007 22:11