for (int i = 0; i < 16; i++)
a = random()*16;
Randomize неповторяющиеся значения!
Код:
Значения случайные могут повторяться! Как мне сделать так. чтобы значения не повторялись?
Вроде бы стандартных средств "неповторения" чисел нет. Можно так:
Код:
a[0] = random()%16;
for( int i = 1; i < 16; ++i ) {
do {
a = random()%16;
} while ( a == a[i-1] );
}
for( int i = 1; i < 16; ++i ) {
do {
a = random()%16;
} while ( a == a[i-1] );
}
Код:
#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]
#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]
элемента массива надо сравнивать со всеми предыдущими(уже сохраннеными в массиве) и если повтор, тогда получать для него новое значение, иначе никак.
п.с. то что я выше написала, это для генерации различных последовательностей случайных чисел.
Код:
#include <atl-что-то-там-не-помню.h>
UUID uid = UuidCreateSequential ();
UUID uid = UuidCreateSequential ();
Что-то типа того, точно не помню, см. UuidCreateSequential.
Выдает ГАРАНТИРОВАННО УНИКАЛЬНЫЕ 128-битные числа :) (в пределах машины).
Код:
#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];
}
......
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];
}
:)
Код:
for (int i = 0; i < 16; i++)
a = random()*16;
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;
}
randomize();
x = rand()%16;
for(int i = 0; i<16; i++)
{
a = x;
x = (5*x + 7)%16;
}