Дапустим, мне необходимо создать 5 чисел, и чтоб сумма их была равна 7. В итоге я получаю случайных пять чисел: 2.2, 0.9, 2.8, 0.6, 0.5. а сумма этих чисел равна 7ми
Спустя 21 минута, 37 секунд (20.07.2012 - 22:55) Placido написал(а):
Могут ли выпасть два или больше одинаковых числа (например, 6.5, 0.4, 0.1, 0, 0, 0, 0)?
Спустя 19 минут, 28 секунд (20.07.2012 - 23:15) 12345 написал(а):
Могут. Только число должны быть больше чем 0 и с одной точкой после запятой
Спустя 14 минут, 52 секунды (20.07.2012 - 23:29) Placido написал(а):
Что-то вроде этого:
$a = 7;
for ($i = 0; $i < 4; $i++)
{
$numbers[$i] = rand(0 , $a*10)/10;
$a -= $numbers[$i];
}
$numbers[] = $a >= 0.1 ? $a : 0;
print_r($numbers);
Спустя 11 часов, 27 минут, 30 секунд (21.07.2012 - 10:57) 12345 написал(а):
Вроде всё нормально, только 0 появляется, как зделасть, чтоб числа 0 не мог быть
Спустя 1 час, 18 минут, 54 секунды (21.07.2012 - 12:16) pak написал(а):
А у меня так получилось:
Выход:
$n = 7;
$d = 5;
if($n > $d and $d != 1)
{
$k = ($n/$d)*10;
for($i = 0; $i < $d-1; $i++)
$arr[$i] = mt_rand(1, $k)/10;
$s = array_sum($arr);
if($s != $n)
$arr[] = $n - $s;
echo array_sum($arr);
}
print_r($arr);
Выход:
7
Array
(
[0] => 0.4
[1] => 1.1
[2] => 0.7
[3] => 1
[4] => 3.8
)
////////////////////
7
Array
(
[0] => 0.2
[1] => 1.4
[2] => 1.3
[3] => 1.1
[4] => 3
)
///////////////////
7
Array
(
[0] => 1
[1] => 0.1
[2] => 1.3
[3] => 1.1
[4] => 3.5
)
///////////////////
.............
Спустя 48 минут, 57 секунд (21.07.2012 - 13:05) 12345 написал(а):
pak, всё нормально работает. Но если задать $n < $d , т.е. допустим $n = 10; $d = 50;
То скрипт не работает. А у меня будет всегда $n < $d
То скрипт не работает. А у меня будет всегда $n < $d
Спустя 9 минут, 47 секунд (21.07.2012 - 13:15) pak написал(а):
замени $n > $d, на $n < $d
Спустя 8 минут, 23 секунды (21.07.2012 - 13:23) 12345 написал(а):
А подскажи, как сделать, чтоб было 2 числа после запятой
Спустя 39 минут, 45 секунд (21.07.2012 - 14:03) pak написал(а):
if($d != 1)
{
$k = ($n/$d)*100;
for($i = 0; $i < $d-1; $i++)
$arr[$i] = mt_rand(1, $k)/100;
$s = array_sum($arr);
if($s != $n)
$arr[] = $n - $s;
echo array_sum($arr);
}
Спустя 4 часа, 48 минут, 10 секунд (21.07.2012 - 18:51) 12345 написал(а):
T
Цитата |
if($d != 1) { $k = ($n/$d)*100; for($i = 0; $i < $d-1; $i++) $arr[$i] = mt_rand(1, $k)/100; $s = array_sum($arr); if($s != $n) $arr[] = $n - $s; echo array_sum($arr); } |
Если установить
$n = 10; $d = 50;, то последнее число какоето уж очень большое. Нельзя ли сделать его поменьше?(оно где-то содержит 50% от $n )
Спустя 57 минут, 40 секунд (21.07.2012 - 19:48) pak написал(а):
незнаю, вроде работает, просто делал одним глазам)
$n = 10;
$d = 50;
if($n < $d and $d != 1)
{
$k = ($n/$d)*100;
for($i = 0; $i < $d-1; $i++)
$arr[$i] = mt_rand(1, $k)/100;
$s = array_sum($arr);
if($s != $n)
{
echo $o = floor($n-$s);
$a = array_rand($arr, $o);
for($i = 0; $i < $o; $i++)
{
$arr[$a[$i]]++;
}
}
$arr[] = round($n-$s-$o,3);
echo array_sum($arr);
}
print_r($arr);
Спустя 25 минут, 45 секунд (21.07.2012 - 20:14) 12345 написал(а):
Спасибо, то что надо)