【问题标题】:Integer dividers整数除法器
【发布时间】:2018-07-20 04:22:15
【问题描述】:

我有这样的数组:

[
 [
  'minutes': 60
 ]
 [
  'minutes': 600
 ],
 [
 'minutes': 1440
 ]
]

从响应中得到整数,如720

我需要使用我的数组拆分 720 例如:

[
  '600' => 1,
  '60'  => 2,
]

所以 60*2 + 600 = 720

已更新,但 $_rate / 10 不正确。也许我不需要在计算中使用 %

public function calculate($_rate, $minutes, $results)
    {
        if(empty($results))
        {
            dump(['rate' => $_rate, 'minutes' => $minutes, 'remainder' => $minutes % $_rate]);
            if(($minutes % $_rate) == 0)
                return ['rate' => $_rate, 'count' => $minutes / $_rate];
            elseif(($minutes % $_rate) != 0) {
                return [
                    $this->calculate($_rate/10, ($minutes % $_rate), $results),
                    [
                        'rate' => $minutes - ($minutes % $_rate), 'count' => $minutes / $minutes - ($minutes % $_rate)
                    ]
                ];
            }
        }
    }

【问题讨论】:

  • 这不是代码编写服务。展示你目前的努力。
  • 我被递归困住了。它的原因我在这里问。
  • @Andrew,您的问题不清楚。第一个数组是什么意思?您是否只需要来自第二个数组的结果 720
  • 看起来很简单。你试过什么?
  • @Andrew 请不要在 cmets 中添加其他信息。编辑您的问题并添加代码。

标签: php laravel math


【解决方案1】:

像这段代码一样使用不同的循环:

$array = [
    [
     'minutes'=> 60
    ],
    [
     'minutes'=> 600
    ],
    [
    'minutes'=> 1440
    ]
    ];

$response = 720;
$remain = $response;
$result = [];

while ($remain > 0) {
    for ($i = count($array)-1; $i>=0; $i--) {
        $result["{$array[$i]['minutes']}"] = 0;
        while ($remain >= $array[$i]['minutes']) {
            $result["{$array[$i]['minutes']}"]++;
            $remain -= $array[$i]['minutes'];
        }
    }
}

【讨论】:

  • 如果数字与数组值不偶数,此代码将失败。 3v4l.org/q8Uqq
【解决方案2】:

使用 foreach 循环并首先比较最大值。
如果 $n 大于分钟值,则减去。
使用 array_count_values 得到你需要多少 600 和 60 分钟。

$arr =array_reverse($arr);
$n =720;
$res=array();
Foreach($arr as $val){
    While($n >= $val['minutes']){
        $res[] = $val['minutes'];
        $n -= $val['minutes'];
    }
    If($n == 0) break;
}
$res =array_count_values($res);
$res[$n] = 1; // optional if you want to capture remaining after loop.
Var_dump($res);

https://3v4l.org/1mlIX
或者如果你想捕获剩余的:
https://3v4l.org/6Y7CC

输出

array(2) {
     [600] => 1
     [60] => 2
}

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2011-07-03
    • 2013-05-25
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多