У меня есть четыре уровня шанса(1,2,3,4). Как сделать, чтобы у каждого уровня, был свой шанс на выпадение, 1 - 25%, 2 - 50%, 3 - 75%, 4 - 100%? Мне нужно чтобы чем больше уровень, тем больше вероятность выпадения. Если уровень = 3, то выпадало бы чаще чем у других уровней. Помогите пожалуйста
10%, 30%, 60% PHP: <?php $random = rand(1, 100); if($random <= 10) { // 10% } elseif($random <= 40) { // 30% } elseif($random <= 100) { // 60% }
по данному коду именно будет 10% 40% и 100% вру... но и не 10, 30, 100 у первого сравнения 10% у второго 0.9*0.4 = 0.36 = 36% у третьего 1 - 0.1 - 0.36 = 0.56*0.6 = 0.336 = 33.6% вероятности
Думаю ТС нужна функция, где в качестве входных параметров задавался бы уровень определяющий выигрыш 1-4, а на выходе с заданной вероятностью получали бы - выигрыш или, нет выигрыша PHP: function win($level) { return = (random(3) <= $level) ? "win" : "fail"; } level - строго от 1 до 4 --- Добавлено --- теорию вероятностей почитайте
первое сравнение согласен - сработает в 10% случаев а вот второе то сработает в оставшихся 90% (0.9) + сравнение что <=40 (0.4) .... то есть с вероятностью 0.9*0.4 ну итд
PHP: <?php $r = [10 => 0, 30 => 0, 60 => 0]; for ($i=0; $i < 10000 ; $i++) { $random = rand(1, 100); if($random <= 10) { $r[10] += 1; } elseif($random <= 40) { $r[30] += 1; } elseif($random <= 100) { $r[60] += 1; } } var_dump($r); PHP: array(3) { [10]=> int(1051) [30]=> int(2988) [60]=> int(5961) } Почему не вышло ~1000 и ~9000?
А кто сказал, что речь идет о вероятностях в пределах одного испытания? Мб просто есть объект. С вероятностью 75% он должен вернуть true. При нормальном распределении это значит, что достаточно взять рандом от 1 до 100 и, если число >=25, вернуть true. Все.