Мне нужна функция, которая генерирует случайное логическое значение с заданной вероятностью от 1 до 100.
Я пробовал с этим:
int randProb(int chance, int min, int max) {
int random = rand();
if (random < (RAND_MAX) / chance / 10)
return -(random % (max - min + 1) + min);
else
return (random % (max - min + 1) + min);
}
но когда я это называю, передавая 1 как вероятность
randProb(1, 0, 1)
иногда он возвращает 1, иногда -1, а иногда 0.
и когда я это называю, передавая 100 как вероятность
randProb(100, 0, 1)
иногда возвращает 0, а иногда 1, как и должно работать, с вероятностью 100 всегда должно возвращать 1.
Примечание время инициализируется следующим образом:
time_t t;
srand((unsigned) time(&t));
Для генерации случайных значений вы можете использовать следующее выражение:
(rand() % (max - min + 1)) + min
Поскольку вам нужен шанс, лучше сгенерировать число от 0 до 100, имитируя проценты, а затем return result < chance
, а именно:
int randProb(int chance)
{
int result = (rand() % (100 - 0 + 1)) + 0;
return result < chance;
}
При изменении = 0 все значения, сгенерированные rand() % 101
, будут больше или равны 0, поэтому result < chance
всегда будет ложным (т. е. нулевым).
При изменении = 100 все значения, сгенерированные rand() % 101
, будут меньше или равны 100, поэтому result < chance
всегда будет истинным.
Наконец, например, для change=70 70 из 100 значений, сгенерированных rand() % 101
, будут меньше или равны 70, поэтому result < chance
будет возвращать true в 70% случаев. И так один и так далее.
Итак, если я правильно понял, ваша функция может возвращать два логических значения 0
и 1
. Поэтому я не вижу причины, по которой вам нужны min
и max
в качестве параметров. Я бы так и сделал, скажите, если я не правильно понял вашу проблему.
int randProb (int chance) {
int random = (rand()%100)+1;
if (random<=chance) {
return 1;
}
else {
return 0;
}
}
Я не знаю C, но могу дать вам псевдокод, который может помочь
Генерировать случайное число от 0 до 100 если это 1, то yourBoolean = true (или false, как бы вы ни хотели быть редким), если нет, то yourBoolean = то, что вы хотите получить с вероятностью 99%.