2010-03-01 5 views
4

Disons que j'ai une plage comprise entre 0 et 100 et que je souhaite renvoyer un tableau contenant 3 entiers répartis uniformément dans cette plage, quelle serait la meilleure façon de procéder?Nombre entiers répartis uniformément dans une plage

Par exemple:

Gamme: 0-100
Recherché: 3
Retourné: 25, 50, 75

+0

Je pense que vous pourriez mal interpréter ce que signifie une distribution uniforme? –

+1

de sorte que vous voulez partitionner la gamme en N + 1 sections? (0-25, 26-50, 51-75, 76-100) et savez quelle est la valeur de la partition? –

Répondre

2

Code Pseudo:

function foo(int rangeLow, int rangeHigh, int wanted) 
    int increment=(rangeHigh-rangeLow)/(wanted+1) 
    array r=new array() 
    for (int i=rangeLow+increment;i<rangeHigh;i+=increment) 
     r.push(i) 
    return r 

edit: a raté la balise php ...

//tested: 
function foo($wanted=3, $rangeLow=0, $rangeHigh=100){ 
    $increment=($rangeHigh-$rangeLow)/($wanted+1); 
    $r=array(); 
    for ($i=$rangeLow+$increment;$i<$rangeHigh;$i+=$increment) 
     $r[]=$i; 
    return $r; 
} 
/* 
    examples: 

    call: 
     foo(); 
    returned: 
      [0] => 25 
      [1] => 50 
      [2] => 75 

    call: 
     foo (4); 
    returned: 
      [0] => 20 
      [1] => 40 
      [2] => 60 
      [3] => 80 

    call: 
     foo (5,50,200); 
    returned: 
      [0] => 75 
      [1] => 100 
      [2] => 125 
      [3] => 150 
      [4] => 175 
*/ 
3

vous pouvez utiliser array_chunk(), par exemple, que

$end=100; 
$a = range(0,$end); 
$chunk=3; 
foreach (array_chunk($a,$end/($chunk+1)) as $s){ 
    print $s[0]."\n"; 
} 

sortie

$ php test.php 
0 
25 
50 
75 
100 

vous pouvez vous débarrasser des points de départ (0) et de fin (100) si ce n'est pas nécessaire.

+0

horriblement inefficace si un '$ end' est un grand nombre, puisque vous créez un tableau avec des éléments' $ end' –

+0

oui, j'ai supposé que OP avait déjà un tableau avec une plage de nombres. – ghostdog74

2

est ici une solution groovy qui donne les réponses que vous voulez, vous devriez être en mesure de passer à quelle que soit la langue que vous utilisez:

def distributedValues(min, max, wanted) { 
    def incrementBy = (max - min)/(wanted + 1) 
    (1..wanted).collect { count -> min + (count * incrementBy) } 
} 


assert distributedValues(0, 100, 1) == [50] 
assert distributedValues(0, 100, 3) == [25, 50, 75] 
assert distributedValues(0, 100, 4) == [20, 40, 60, 80] 
assert distributedValues(0, 100, 5) == [16.6666666667, 33.3333333334, 50.0000000001, 66.6666666668, 83.3333333335] 
assert distributedValues(100, 200, 3) == [125, 150, 175] 
+0

: O on dirait du python, mais avec des squigglies et une gamme astucieuse spécifie !!! J'aime! – mpen

1

Vous pouvez utiliser la fonction rand pour obtenir la valeur aléatoire entre le spe gammes spécifiques. Utilisez ce code. La fonction suivante retournera un ensemble d'éléments dans un tableau

function array_elements($start = 0 , $end = 100 , $element =5 ) 

{ 

$myarray = array() ; 

for ($i = 0 ; $i < $element;$i++) 

{ 

    $myarray[$i]= rand ($start, $end); 

} 

return $myarray ; 

} 

print_r (array_elements()) ; 
Questions connexes