[C++(Dos)] Одномерный массив
Как сделать?
#include <cstdlib>
using namespace std;
int main()
{
int *p;
int n;
cout<<"Please,enter n-> ";
cin>>n;
p=new int[n];
srand(n);
for (int i=0;i<n;++i)
p=rand();
delete[] p;
return 0;
}
при заполнении массива проверяешь,нет ли такого элемента в массиве если есть,то присваиваешь новое и снова проверяешь.
при заполнении массива проверяешь,нет ли такого элемента в массиве если есть,то присваиваешь новое и снова проверяешь.
Это ж сколько придется ждать от rand'a нужного значения, особенно если n немаленькое? Вначале-то проблем не будет, а вот для элементов n-2, n-1...
Можно создать дополнительный массив с допустимыми значениями (от 1 до n). Точнее не массив, а вектор. Тогда генерируем рандомное значение индекса элемента вектора, присваиваем значение этого элемента элементу массива и удаляем уже использованный элемент вектора.
#include <cstdlib>
using namespace std;
int main()
{
int *p;
int n;
cout<<"Please,enter n-> ";
cin>>n;
p=new int[n];
srand(n);
for (int i=0;i<n;++i)
p=rand();
delete[] p;
return 0;
}
Попробовал этот код, на выходе массив получается из очень больших чисел, которые явно не принадлежат заданному промежутку
потому что нужно писать не p=rand(), а
все же имхо лучше вариант с вектором
Как сделать?
Если я правильно понял условие( ? ),необходимо,чтоб массив содержал
все значения до выбранного предела(n).Т.е. если n = 10,то массив
должен содержать элементы от 1 до 10(1,2,3...,9,10) включительно.
Вводим с клавиатуры n и создаем 2 массива один заполняем
числами от 1 до n(в цикле),второй - случайными числами.Наш массив
не содержит одинаковых элементов,но он упорядочен.Надо разбросать
элементы.Т.е.вся задача сводится к разбросу элементов массива.
Используем сортировку и сортируем вспомагательный массив,а заодно и переставляем элементы нашего массива.
#include <iostream>
#include <ctime>
using namespace std;
void BSort(int mass[],int arr[], int size);
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
cout<<"Input n > 1"<<endl;
int n = 0;
cin>>n;
int *mass = new int[n+1];
for(int i = 1;i <= n;++i)
mass = rand() % 100;
cout<<endl;
int *arr = new int[n+1];
for(int i = 1;i <= n;++i)
arr = i;
BSort(mass,arr,n+1);
cout<<"\tArray"<<"\n\n";
for(int i = 1;i <= n;++i)
cout<<arr<<' ';
cout<<endl;
delete[] mass;
delete[] arr;
return 0;
}
void BSort(int mass[],int arr[], int size)
{
bool flag = true;
int i, j;
int temp,temp1;
for (j = 1; ; j++)
{
for(i = 0; i < size - j; i++)
if (mass > mass[i + 1])
{
temp1 = mass;
temp = arr;
mass = mass[i + 1];
arr = arr[i + 1];
mass[i + 1] = temp1;
arr[i + 1] = temp;
flag = false;
}
if(flag)
break;
flag = true;
}
}