【问题标题】:Check every possible combination of numbers against one [closed]检查每个可能的数字组合对一个[关闭]
【发布时间】:2013-08-07 08:35:28
【问题描述】:

我目前将数字加载到数组中,这些数字总是不同的,并且可以有任意数量,这是一个示例;

Array ( [0] => 60.0 [1] => 56.8 [2] => 42.08 [3] => 52.16 [4] => 52.8 )

我正在尝试计算这个数组的所有可能结果,我只需将所有数字加在一起(除了键号及其自身)并尝试匹配一个数字,例如;

60.0 + 56.8, 60.0 + 42.08, 60.0 + 52.16 等等等等

然后到 56.8 + 60.0, 56.8 + 42.08 等等等等

但不包括; 60.0 + 60.0 或其他包含自身的计算

【问题讨论】:

    标签: php arrays numbers combinations


    【解决方案1】:

    试试这个..

       $str = Array ( "60.0","56.8","42.08","52.16","52.8" );
    $result = array();
    foreach ($str as $v){
        foreach($str as $d){
            if($d!=$v){
    
                $result[]=$v."+".$d;
            }
        }
    }
    
    $strResult = implode(",",$result);
    print_r($strResult);
    

    【讨论】:

    • 我发现这个答案是最合适的,非常感谢@shark,我有一个问题,是否可以修改此代码以采用一个参数来控制它的总和,它目前将两个值相加,但是否可以说 4 个值,然后计算?再次感谢您
    【解决方案2】:

    我可以通过将源值分组为对来提供解决方案,如下所示:

    function array_repeat_pair($rgData)
    {
        $rgRepeats  = array();
        for($i=0;$i<count($rgData);$i++)
        {
            for($j=0;$j<count($rgData);$j++)
            {
                if($i!=$j && !array_key_exists($i*$i+$j*$j, $rgRepeats))
                {
                    $rgRepeats[$i*$i+$j*$j] = [$rgData[$i], $rgData[$j]];
                }
            }
        }
        return $rgRepeats;
    }
    
    $rgData   = [60.0, 52.7, 54.2, 45.8];
    $rgResult = array_map('array_sum', array_repeat_pair($rgData));
    //var_dump($rgResult);
    

    不确定它是否正是您所需要的(即对 [a,b] 被视为与 [b,a] 相同)

    【讨论】:

      【解决方案3】:

      我目前无法彻底检查,但我相信这会奏效:-

      $array = array(60,56.8,42.08,52.16,52.8);
      
      while(count($array) > 0){
          $first = array_shift($array);
          foreach($array as $value){
              $result[] = $first + $value;
          }
      }
      

      输出:-

      array (size=10)
        0 => float 116.8
        1 => float 102.08
        2 => float 112.16
        3 => float 112.8
        4 => float 98.88
        5 => float 108.96
        6 => float 109.6
        7 => float 94.24
        8 => float 94.88
        9 => float 104.96
      

      See it working

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 2013-05-25
        • 1970-01-01
        相关资源
        最近更新 更多