Один из способов справиться с этим - сделать:
Random random = new Random();
int f(int min, int max, int x, int chance)
{
if (random.Next(100) < chance)
{
return x;
} else {
int result = random.Next(min, max + 1);
while (result == x) {
result = random.Next(min, max + 1);
}
return result;
}
}
Немного недетерминировано, поскольку теоретически вы можете застрять, повторяя x как ваше случайное число, но на практике это не проблема.
РЕДАКТИРОВАТЬ: Однако, если вы посмотрите на подход Альбина Суннанбо, ему удастся избежать повторных случайных. Следующие вызовы просто избегая максимального значения и увеличивая его, если первое случайное число равно x или более (таким образом, также исключая x).