Другие языки программирования и технологии

randomize();. С++; Как заполнить массив допустим из 15 чисел случайным образом от 1 до 15 , чтобы числа не повторялись?

// Дядя_Ваня_2011-11-26
#include <iostream>
#include <ctime>
using namespace std;
#define N 15

void main()
{
int a[N];

do
{
system("cls");
srand((unsigned) time(NULL));
cout << endl;

for (int n = 0; n < N; n++)
{
a[n] = 1 + rand() % 15;

for (int m = 0; m < n; m++)
{
if (a[n] == a[m])
{
n--;
break;
}
}
}

for (int n = 0; n < N; n++) cout << ' ' << a[n];

fflush(stdin);
cin.get();
}
while (true);
}
Andrey Kryukov
Andrey Kryukov
76 937
Лучший ответ
Допустим вбить в массив последовательность от 1 до 15, а потом рандомно отсортировать)
int a[15];

srand( time( NULL ) );

for( int i = 0; i < 15; i++ )
{
a [ i ] = rand() % 16 + 1;
for( j = 0; j < i; j++ )
if( a[ j ] == a [ i ] )
{
i--;
break;
}
}
Серёга Гран
Серёга Гран
25 952
еще можно использовать функцию random_shuffle() из algorithm.

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <algorithm>
using namespace std;

#define NUM 15

int main()
{
int a[ NUM ];
for(unsigned int k= 0; k< NUM; k++)
{
a[ k ]= k+1;
}

srand( time( 0 ) );

random_shuffle(a, a+(NUM-1));

for(int k= 0; k< 15; k++)
{
cout<< setw(4)<< a[ k ];
}
cout<< endl;

return 0;
}

________
и еще,
Павел чуть ошибся. Надо остаток не от 16 а от 15 брать.
Masaomi Kida
Masaomi Kida
23 527

Похожие вопросы