Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > масивы


Автор: irvis 19.5.2006, 15:12
вот дан массив от 1 до 20. нужно случайным образом разбросать элементы массива. 
как можно это сделать?
меня хватило только на это
Код

void razbros(int a[], int n)
{
    for(int i=0; i<n; i++)
    {
        a[i]=rand()%n+1;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    
}


void main()
{
    srand(time(NULL));
    const int n=20;
    int a[n];
    for (int i=0; i<n; i++)
    {
        a[i]=i+1;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    razbros( a, n);
}


но это не правильно, числа повторяються, а не которых вообще нет 

Автор: Earnest 19.5.2006, 15:17
1) Заполнить массив последовательными значениями от 1 до 20
2) 10 раз обменять местами 2 случайных элемента массива или воспользоваться стандартным алгоритмом из STL random_shuffle

 

Автор: irvis 19.5.2006, 15:25
точно. сенкс  

Автор: GremlinProg 19.5.2006, 15:33
Код

for(i=n; i--;){
  rid = (rand()/RAND_MAX) * i;

  // каждая итерация цикла будет давать случ. число с выбыванием

  uid               = randset[rid]
  randset[rid] = randset[i];
  randset[i]    = uid;
}

// uid - уникальное число в диапазоне
// после одного прохода массив randset будет случайным образом переформирован 
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)