Получение случайного значения в php, где должно быть точное количество

#php

#php

Вопрос:

У меня есть проблема, когда мне нужны случайные значения в php. У меня все это работает. Но когда мне нужно, скажем, 10 случайных значений, мне нужно, чтобы 8 из них были по крайней мере определенным целым числом. Как я могу этого добиться? С уважением, Леон

 <?php
$vertices = $_POST["vertices"];
echo "Vertices: $vertices <br>";
$edges = $_POST["edges"];
echo "Edges: $edges <br>";
$length = $_POST["length"];
echo "Length: $length <br><br>";

$temp1 = $edges;

for($x = 0; $x < $vertices; $x  ){
for($i = 0; $i < $x; $i  ){
    echo "_   ";
}
for($y = $x; $y < $vertices; $y  ){

    $value = rand(0,1);
    if($x == $y){ 
        echo "0   ";
    } else {
        if($value == 1 amp;amp; $temp1 > 0){
            echo "1   ";
            $temp1--;
        } else {
            echo "0   ";
        }
    }
}
echo "<br>";
}
?>  
<html>
</font>
</html>
 

Это приведет к выводу чего-то вроде этого:

 Vertices: 5 
Edges: 8 
Length: 4 

0 0 1 0 1 
_ 0 0 1 0 
_ _ 0 1 0 
_ _ _ 0 1 
_ _ _ _ 0 
 

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

Комментарии:

1. покажите свой код.

2. При генерации случайного числа есть опция для «min» и «max»: php.net/manual/en/function.rand.php

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

4. Это не 10 случайных значений: это 2 случайных значения и 8 значений, выбранных случайным образом из определенной коллекции.

5. Сгенерируйте пару случайных чисел и просто назначьте 3 (случайное, потому что вы только что получили его от какого-то парня в Интернете) для остальных for($i=0;$i<8;$i ) { $certainInteger[] = 3; } : dilbert.com/strip/2001-10-25

Ответ №1:

Я бы выбрал другой подход:

  • Есть $vertices * ($vertices - 1) / 2 позиции, которые вам нужно заполнить (10).
  • Должны быть $edges времена 1 и остальные 0 (8 и 2).
  • Вы можете заполнить массив 8 1 ‘s и 2 0 ‘s.
  • Перетасуйте массив.
  • Перебирайте свою матрицу и вставляйте элемент массива для каждой позиции, которую вам нужно заполнить.

Комментарии:

1. Но переменные (например, 10, 8) могут меняться. Как вы создаете массив, который будет работать с этим? И как мне перетасовать массив?

2. Я думаю, что это действительно может сработать, спасибо, чувак! Теперь у меня есть перетасованный массив

3. Я просто собирался сказать, что вы можете использовать array_fill для генерации 2 массивов с 0 и 1 и объединить их. shuffle() результат и готово 🙂