Aralığında eşit olarak dağıtılır tamsayılar

3 Cevap php

Ben 0 ile 100 arasında bir dizi var ve ben bir dizi eşit olduğunu aralığında dağıtılan 3 tamsayılar içeren döndü, bu ne yapmak için en iyi yol olacağını istiyorsunuz diyelim?

Örneğin:

Range: 0-100
Wanted: 3
Returned: 25, 50, 75

3 Cevap

Sahte kod:

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: php etiketi cevapsız ...

//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
*/

Eğer örneğin sadece) (array_chunk yararlanabilir

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

çıktı

$ php test.php
0
25
50
75
100

Eğer start (0) ve sonunda gerekli değilse (100) puan kurtulabilirsiniz.

Burada istediğiniz cevaplar, size kullandığınız ne olursa olsun diline geçiş mümkün olmalıdır veren Groovy'de bir çözüm:

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]