首页 > 解决方案 > 如果最大值只能是 30,如何组合数组中的值?

问题描述

我试图通过添加它们来组合数组中的数字,以便最大值只能是 30。

例如,这是我的数组:

array(10,30,10,10,15);

将数组中的数字组合到最大值为 30 的项目后,结果应为:

array(30,30,15);

如何做到这一点?

标签: phparrays

解决方案


我试图通过添加它们来组合数组中的数字,以便最大值只能是 30

因此,当您组合数字时,您可以在数组中实现尽可能低的一组值,并通过以下方式确保最大值保持 30:

  • 首先,对它们进行排序。
  • 其次,继续向 sum 添加元素,直到总和 > 30。
  • 第三,一旦某个元素不能再添加到总和中,请将当前总和添加到数组中,并将当前元素作为新总和。

代码:

<?php

$arr = array(10,30,10,10,15);
sort($arr);

$res = [];
$curr_sum = 0;

foreach($arr as $each_value){
    if($curr_sum + $each_value <= 30) $curr_sum += $each_value;
    else{
        $res[] = $curr_sum;
        $curr_sum = $each_value;
    }
}

$res[] = $curr_sum;

print_r($res);

演示: https ://3v4l.org/BYhuE

更新:如果数字的顺序很重要,看到您当前的输出,您可以使用rsort()以降序显示它们。

rsort($res);

推荐阅读