Mohammad Shaheen Ответов: 2

Получить неповторяющееся случайное число


я хочу, чтобы математическое уравнение или функция получили число между двумя числами .. например, два числа-это 5 и 10 .. когда я отправлю 5, будет выполнен процесс и возвращено число, например, 7, этот результат не будет повторен .. и когда я отправлю 8 . вернется, например, 10

Что я уже пробовал:

вот вам пример
void main()
{
    int from1 =5,to=10;
    for(int a=from1 ;a<=to;a++)
    {
        int result=gen(from1 ,to,a);
    }
}

int gen(int min , int max,int value)
{
    //The result is generated by a calculation based on three values, and this
    //result will not be repeated
    //The result is between the smallest value and the largest value
    return result;
}

Я использовал много методов, но все они хранятся в памяти, и я не хочу этого. например

void not_good()
{
    var ran = Enumerable.Range(from, to).OrderBy(x => Guid.NewGuid());
    foreach (int i in ran)
    {
    }
    /////////////////
    List<int> listNumbers = new List<int>();
    int number;
    for (int i = from; i < to; i++)
    {
      do {
         number = rand.Next(from, to);
      } while (listNumbers.Contains(number));
      listNumbers.Add(number);
    }
}


и я использовал случайную функцию не решающую меня

gggustafson

И как бы вы сохранили знания о ранее сгенерированных значениях, не используя какую-либо форму хранения памяти?

2 Ответов

Рейтинг:
1

OriginalGriff

Случайные числа являются случайными. А это означает, что следующее число, возвращаемое генератором, вообще не зависит от предыдущих результатов: оно с такой же вероятностью будет генерировать любое число в последовательности каждый раз, когда вы пытаетесь получить новое случайное число.
И есть еще одна проблема: если вы извлекаете числа в диапазоне от x до y - скажем, от 5 до 9 включительно - что происходит, когда вы пытаетесь вернуть (n = (y - x) + 2) - е число? Вы использовали все значения до сих пор 7 9 6 5 8 ? ...

Единственный способ сделать это-сохранить в памяти числа для извлечения и удаления значений из коллекции при их использовании. (или числа, которые вы выбрали, но это должно быть недетерминированное время выборки "следующего значения" )


Рейтинг:
0

Patrice T

Цитата:
я хочу, чтобы математическое уравнение или функция получили число между двумя числами

Короткий ответ: "его не существует". Оба запроса являются взаимоисключающими.
Самое близкое-это алгоритм "перетасовки", точно так же, как вы перетасовываете колоду игральных карт, а затем рисуете 1 на 1.
Фишер–Йейтс шаффл - Википедия[^]
Перетасуйте заданный массив с помощью алгоритма перетасовки Фишера–Йейтса - GeeksforGeeks[^]