2010-03-01 98 views
4

可以说我有一个介于0和100之间的范围,我想要一个数组返回包含3个均匀分布在该范围内的整数,那么最好的方法是什么?均匀分布在一个范围内的整数

例如:

范围:0-100
通缉:3
返回:25,50,75

+0

我想你可能会误解什么是均匀分布的含义? – 2010-03-01 02:54:09

+1

所以你想要将范围分割成N + 1个部分? (0-25,26-50,51-75,76-100)并知道分区值是什么? – 2010-03-01 02:58:09

回答

2

伪代码:

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 

编辑:错过了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

,您可以利用array_chunk()的,例如,仅

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

输出

$ php test.php 
0 
25 
50 
75 
100 

如果不需要,您可以摆脱开始(0)和结束(100)点。

+0

如果'$ end'是一个很大的数字,可怕的效率很低,因为你用'$ end'元素创建一个数组 – 2010-03-01 07:13:22

+0

是的,我假设OP已经有一个数组范围了。 – ghostdog74 2010-03-01 07:19:25

2

下面是常规,让你想要的答案的解决方案,你应该能够将其切换到无论您使用何种语言:

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

:它看起来像蟒蛇,但与squigglies和漂亮的范围指定!我喜欢! – mpen 2010-03-01 07:03:10

1

您可以使用rand函数来获取特殊值之间的随机值特定范围。 使用此代码。这下面的函数将返回一组数组中的元素

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()) ;