Ну если использовать счетчики как в первом примере, то можно найти в них наибольщую и наименьшую вероятность и если они отличаются друг от друга больше ну скажем чем на заданную величину (например 5%) то возвращать число которое соответствует наименьшей вероятности, а если разница меньше заданной то использовать оператор Rand()
Больше ничего в голову не лезет
