将数字分成数字组

时间:2014-08-25 16:47:01

标签: php arrays algorithm range

我有一个生成一系列数字的算法。参数为$min$range。如果我给出值:

$min = 4
$range = 1

算法生成数字,可以在最小范围内分组。比方说,对于上述输入,算法会生成从$min$min + $range开始的数字,乘以增量:

Iteration n: range($min x n to ($min + 1) x n)
Iteration 1: 4, 5            // range (4, 5)
Iteration 2: 8, 9, 10        // range (8, 10) 
Iteration 3: 12, 13, 14, 15  // range (12, 15) 
// and so on!

因此,如果我将输入数字设为13,我们可以理解它可以通过任何方式获得:

1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
2 + 2 + 2 + 2 + 2 + 2 + 1
3 + 3 + 3 + 3 + 1
4 + 4 + 4 + 1
5 + 5 + 3
6 + 6 + 1
7 + 6
8 + 5

等等。但根据输入,我们的数字仅在45范围内。所以,我应该得到答案:

4 + 4 + 5

如果我按照上面的方法,从较大的数字开始,它将迭代:

5 + 5 + 3     // 3 is Invalid
4 + 4 + 4 + 1 // 1 is Invalid

如何使算法理解常见匹配或类似最高公因子或最大公共分频器概念,我们只需得到以下结果:

4 + 4 + 5

我坚持这个,如何继续。上面的解释是算法的实现,但我不知道如何实现它。

我的尝试之一是,混合使用所有数字并尝试标记每一位。因此,在第一次尝试时,我使用最小的数字来匹配它:

4 + 4 + 4

正如,4 + 4 + 4 + 4超过13。现在,我正在接下一个人:

5 + 5 + 5

保持两组输入,我逐一减少数字:

Try 0: 5 + 5 + 5 // Larger
Try 1: 5 + 5 + 4 // Larger
Try 2: 5 + 4 + 4 // Success

更新#1

目前的实施是:

function getNums($k, $range, $num)
{
    $q = floor($num / $k);
    $r = $num % $k;
    echo str_repeat($q . ", ", $k - $r), str_repeat(($q+1) . ", ", $r);
}

输出很奇怪:

getNums(4, 1, 13); // 3, 3, 3, 4 // Expecting 4, 4, 5
getNums(4, 1, 18); // 4, 4, 5, 5

1 个答案:

答案 0 :(得分:1)

尽可能均匀地n分割k方式:计算q = n / kr = n % k(分区/模数)。返回k - 元素列表,其中包含k - rq rq + 1份的q份副本。 q + 1function getNums($q, $range, $num) { $k = floor($num / $q); $r = $num % $q; echo str_repeat($q . ", ", $k - $r), str_repeat(($q+1) . ", ", $r); } (如果使用)都在范围内。

{{1}}