代码之家  ›  专栏  ›  技术社区  ›  senty

实现921和999乘39个整数循环

  •  0
  • senty  · 技术社区  · 5 年前

    我处于这样一种情况下,我需要实现除法921/39,并通过给出整数(循环39次),再次实现921。

    $packagesCount = count($packages);      // = 39
    $averageWeight = 921/$packagesCount;    // = 23.6153846154
    
    foreach ($packages as $package) {
        $package['Weight'] = "<whole number>";
    }
    

    原因是,我需要给出API的整数,但总数应该是921。因此,我不能给出整数。


    我想到的一个方法是:

    $packagesCount = count($packages);      // = 39
    $averageWeight = 921/$packagesCount;    // = 23.6153846154
    $remainder = ceil($averageWeight);      // = 24 
    
    foreach ($packages as $package) {
        $package['Weight'] = floor($averageWeight);
    
        if ($remainder > 0) {
            $package['Weight'] += 1;            
            $remainder -= 1;
        }
    }
    

    但是试着用 999 总重量不适用于这种方法;它最终给出的不是999 39 * 25 + 26 = 1001 .

    对于999,我应该使用 39 * 25 + 24 = 999 但是如何呢?

    1 回复  |  直到 5 年前
        1
  •  0
  •   SergGr    5 年前

    我想你需要 intdiv 和模 % :

    $packagesCount = count($packages);     
    $averageWeight = $totalWeight/$packagesCount;
    $wholeWeight = intdiv($totalWeight,$packagesCount);
    $weightRest = $totalWeight % $packagesCount;
    // totalWeight = wholeWeight * packagesCount + weightRest 
    
    $i = 0;
    foreach ($packages as $key => $package) {
        $w = $wholeWeight;
        if ($i < $weightRest) {
         $w += 1;
        }
        $i+= 1;
        $packages[$key]['Weight'] = $w;
    }
    

    我们的想法是,每个包至少有 英迪夫 重量和第一 weightRest 包装重量将增加1。以这种方式,你将完全符合你的 totalWeight .

    也见 online demo

    p.s.php不是我的语言,因此代码可能非常不惯用。不过,我还是希望它能传达这个想法。