php - 将数字分成数字组

标签 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

如何让算法理解公共(public)匹配或类似最高公因数或最大公约数的概念,我们只需要得到以下结果:

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

最佳答案

尽可能均匀地拆分 n k 方法:计算 q = n/kr = n % k(楼层划分/模数)。返回一个 k 元素列表,其中包含 k - rq 副本和 rq + 1qq + 1(如果使用)都在范围内。

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

关于php - 将数字分成数字组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25490614/

相关文章:

php - mysqli_connect 无法在共享服务器上工作

c++ - 如何从用户定义的函数返回一个 3D 数组?

ruby - sinatra中的错误数组

c - 如何检测C二维数组的溢出?

mysql - 如何检查一个字符串是否看起来是随机的,或者是人为生成的和发音的?

PHP move_uploaded_file() 错误?

php - 使用 jQuery AJAX 在完整日历中显示事件

PHP,下拉菜单和搜索表单,如何传递变量来选择查询

python - 如何找到字符串的可能组合总数?

algorithm - 允许共享开始/结束顶点的有向最大加权二分匹配