Просто хочу начать извиняться, если на это был дан ответ, и нужно просто сформулировать его по-другому, поэтому я не смог его найти. Я работаю над этой конкретной проблемой в течение нескольких часов, и, возможно, мой Google Fu слаб.Сравните все элементы в пределах одного массива
Для моего класса C++ я должен создать генератор случайных чисел, который собирает данные от пользователя, чтобы указать количество цифр, которые должны быть номера, и количество создаваемых rands. Я могу создать randoms просто отлично, единственная проблема состоит в том, что числа не могут дублироваться в любой момент, а цикл if, который я создал в конце, чтобы уменьшить, возвращает true всегда, и я не могу понять, почему. Из-за этого цикл никогда не переходит к увеличению i. Если я не ошибаюсь, не должно быть даже возможности иметь двойную запись с первой попытки?
void TargetGen::genNumbers()
{
int mod = 0;
int baseMod = 0;
if(Digits != 1)
{
baseMod = pow(10.0,(Digits -1));
}
mod = (pow(10.0,Digits))-baseMod;
for(int i=0;i<Numbers;i++)
{
cout << "front of i loop, value of i: " << i << endl;
int randomTemp;
randomTemp = rand() % mod + baseMod;
targets[i] = randomTemp;
cout << "rand: " << targets[i] << endl;
for(int k = 0;k <= Numbers; k++)
{
if(targets[k] == targets[i])
{
cout << targets[i] << endl;
i--;
}
cout << " k looping, k value: " << k << endl;
cout << " k loop, value of i: " << i << endl;
}
}
}
Самый простой способ избежать дублирования и не хранить все числа в памяти - использовать порядковые номера 1,2, .. N и шифровать каждый с помощью любого симметричного блока cypher, например DES. Поскольку число может быть дешифровано обратно, тогда невозможно иметь 2 разных входа, карты которых соответствуют одной и той же криптограмме. – maxihatop
Возможный дубликат [Алгоритм для выбора одной случайной комбинации значений?] (Http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –
Сделать 'target' a' std :: set' и продолжайте добавлять случайные числа, пока не достигнете нужного размера. –