Как сделать так, чтобы случайное число (до 50 миллисекунд) не повторялось дважды - PullRequest
0 голосов
/ 19 октября 2019

Я делаю автокликер, и он генерирует случайные числа в миллисекундах (диапазон 20-100), скажем, он генерирует задержки: 30, 40, 42 (все <(меньше) 50) </p>

Теперь яхочу сделать так, чтобы 4-я задержка не могла быть снова меньше 50, я попробовал это:

Я пытался использовать для цикла, но мой, когда я использую этот код, автокликер больше не работает / не будетпереключение или что-то в этом роде.

Представьте, что вы создали скрипт автокликера, который генерирует случайные числа от 20 до 100, и вы не хотите, чтобы задержки в 4 рядах были меньше 50, что бы вы сделали? Спасибо.

        for (int i = 0; i < 4;)
        {

            // Total Delay aka delay1+delay2
            if (totaldelay < 50)
            {
                i++;
            }

            // Should make totaldelay > 50
            if (i == 3)
            {
                delay1 = RandomInt(75, 105);
            }

            // Reset to 0 so it checks from 0 again
            if (total > 50)
            {
                i = 0;
            }





        }

1 Ответ

2 голосов
/ 19 октября 2019

Если я правильно понимаю вопрос, вы не хотите, чтобы четыре последовательных числа были все меньше 50. Вы можете достичь этого, просто ведя счет и корректируя свое поведение так, чтобы вы генерировали другое число, если предыдущие три быливсе меньше 50.

Если вам нужна отдельная функция C ++ для этого (дает вам одно случайное число на вызов с вашими дополнительными ограничениями), вы можете использовать что-то вроде:

int getMyRand() {
    // Keep track of how many consecutive under-50s already done.
    // Careful in multi-threaded code, may need thread-local instead.

    static int consecUnder50 = 0;
    int number;

    // If last three were all < 50, force next one to be >= 50.

    if (consecUnder50 == 3) {
        number = rand() % 51 + 50;  // 50-100 (inclusive).
    } else {
        number = rand() % 81 + 20;  // 20-100 (inclusive).
    }

    // If less, record it, otherwise restart count.

    if (number < 50) {
        ++consecUnder50;
    } else {
        consecUnder50 = 0;
    }

    // Give caller the number.

    return number;
}

Не забудьте запустить генератор случайных чисел перед его использованием, и имейте в виду, что в C ++ есть лучшие генераторы случайных чисел, хотя rand() обычно хорошо, если вы не статистик или криптограф:)

...