Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从中心开始的交替算法_Php_Algorithm - Fatal编程技术网

Php 从中心开始的交替算法

Php 从中心开始的交替算法,php,algorithm,Php,Algorithm,我正试图找出一个算法,得到一个阵列结果,它是距离中心等距离的交替点(可以是基于百分比的)。所以,我的最终结果是: X=20(基于#个项目的间隔距离)-100/5(5个项目分布在100%以上) A=50(中心点) B=70(A+20) C=30(A-20) D=90(B+20) E=10(C-20) 另一个结果是,如果我们有10个项目(X=100/10): A=50(中心点) B=60(A+10) C=40(A-10) D=70(B+10) E=30(C-10) F=80(D+10) G=2

我正试图找出一个算法,得到一个阵列结果,它是距离中心等距离的交替点(可以是基于百分比的)。所以,我的最终结果是: X=20(基于#个项目的间隔距离)-100/5(5个项目分布在100%以上)

  • A=50(中心点)
  • B=70(A+20)
  • C=30(A-20)
  • D=90(B+20)
  • E=10(C-20)
另一个结果是,如果我们有10个项目(X=100/10):

  • A=50(中心点)
  • B=60(A+10)
  • C=40(A-10)
  • D=70(B+10)
  • E=30(C-10)
  • F=80(D+10)
  • G=20(E-10)
  • H=90(F+10)
  • I=10(G-10)
  • J=100(H+10)

如果这很重要,我将尝试使用PHP实现这个算法。我不是一个数学天才,所以我不确定这种类型的计算是否有名字。谢谢

如果我理解正确,这应该可以:

function pointsArray($center, $numPoints) {        
        $arr = array();
        $arr[0] = $center;

        for($i = 1;$i < $numPoints; $i++)
            $arr[$i] = $i%2 == 0 ? $center - ($i-1)*20 : $center + $i*20;

        return $arr;
}

您可以编写如下函数:

function getArrayEquidistant($startValue, $step, $nbEntries)
{
    $i = 0;
    $count = 1;
    $final = array();
    $final[] = $startValue;
    while($i < $nbEntries)
    {
        if ($i % 2 == 0)
            $final[] = $startValue + ($count * $step);
        else
        {
            $final[] = $startValue + ($count * $step);
            $count++;
        }

        $i++;
    }

    retun $final;
}
将为您提供:

Array
(
    [0] => 50
    [1] => 70
    [2] => 30
    [3] => 90
    [4] => 10
    [5] => 110
    [6] => -10
    [7] => 130
    [8] => -30
    [9] => 150
    [10] => -50
)

这基本上就是我现在的工作。我不确定是否有什么神奇的数学方法可以做到这一点。尽管如此,我使用了2个计数$left和$right,以及使用%2替换每个步骤的总计都不会写入它,但您也可以使用不同的方法处理步长值,并在每次迭代时将其乘以-1。(以便依次添加+步骤和-步骤)。
print_r(getArrayEquidistant(50, 20, 10));
Array
(
    [0] => 50
    [1] => 70
    [2] => 30
    [3] => 90
    [4] => 10
    [5] => 110
    [6] => -10
    [7] => 130
    [8] => -30
    [9] => 150
    [10] => -50
)