Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Randomize неповторяющиеся значения!

249
28 июня 2006 года
DissDoc
639 / / 01.10.2004
Привет всем, проблема от какая, random дает случайное значение. В моем случае random()*16 - значение от 0 до 15. В цикле же
 
Код:
for (int i = 0; i < 16; i++)
    a = random()*16;

Значения случайные могут повторяться! Как мне сделать так. чтобы значения не повторялись?
562
28 июня 2006 года
tarekon
175 / / 19.08.2003
random()*16 - это точно числа от 0 до 15? Или все-таки random()%16 ?

Вроде бы стандартных средств "неповторения" чисел нет. Можно так:
 
Код:
a[0] = random()%16;
for( int i = 1; i < 16; ++i ) {
   do {
      a = random()%16;
   } while ( a == a[i-1] );
}
18K
28 июня 2006 года
Olga_
3 / / 27.06.2006
//C
 
Код:
#include <stdlib.h>
#include <stdio.h>
[COLOR=blue]#include[/COLOR] [COLOR=darkred]<time.h>[/COLOR]
 
[COLOR=purple]srand(time(NULL));[/COLOR]
[LEFT]for (int i = 0; i < 16; i++)
a = rand()%16;[/LEFT]
18K
28 июня 2006 года
Olga_
3 / / 27.06.2006
если речь идет о том, что бы в данной последовательности чисел сохранненых в массиве не было повторений чисел, тогда новое значение
элемента массива надо сравнивать со всеми предыдущими(уже сохраннеными в массиве) и если повтор, тогда получать для него новое значение, иначе никак.
п.с. то что я выше написала, это для генерации различных последовательностей случайных чисел.
350
28 июня 2006 года
cheburator
589 / / 01.06.2006
 
Код:
#include <atl-что-то-там-не-помню.h>

UUID uid = UuidCreateSequential ();

Что-то типа того, точно не помню, см. UuidCreateSequential.
Выдает ГАРАНТИРОВАННО УНИКАЛЬНЫЕ 128-битные числа :) (в пределах машины).
292
29 июня 2006 года
Matush
726 / / 14.01.2004
Код:
#define MAX_ELEM 16
......
srand(time(NULL));
int m[MAX_ELEM];
 
for(int x=0; x<MAX_ELEM; x++)
   m[x] = x;
 
for(int x=0; x<MAX_ELEM; x++)
{
   int rPos = rand()%MAX_ELEM;
   m[x]^=m[rPos]^=m[x]^=m[rPos];
}
13K
29 июня 2006 года
Lucky_Strike
33 / / 04.06.2006
а ты считывай мышиные координаты и на их основе модифицируй rand
:)
9.4K
29 июня 2006 года
_nоrth_
99 / / 24.04.2006
[QUOTE=DissDoc]Привет всем, проблема от какая, random дает случайное значение. В моем случае random()*16 - значение от 0 до 15. В цикле же
 
Код:
for (int i = 0; i < 16; i++)
    a = random()*16;

Значения случайные могут повторяться! Как мне сделать так. чтобы значения не повторялись?[/QUOTE]
В таких случаях используют случайные последовательности типа Xn+1 = (a*Xn + c)%m, которые последовательно генерируют все числа с 0 по m-1.

1. Выбирается m, обычно степень двойки. В данном случае m = 16;
2. Определяется a, по формуле a % 8 = 5 и a > sqrt(m). a = 5
3. c должна быть нечетной и не делиться на 5, если m является степеню 10. с = 7;

Xn+1 = (5*Xn + 7)%16
 
Код:
int x, a[15];
  randomize();
  x = rand()%16;
  for(int i = 0; i<16; i++)
  {
    a = x;
    x = (5*x + 7)%16;
  }
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог