首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从中心开始的交替算法

从中心开始的交替算法
EN

Stack Overflow用户
提问于 2013-03-25 05:47:56
回答 2查看 39关注 0票数 0

我试图找出一个算法来得到一个排列的结果,这个结果是与中心等距的交点(可以是基于百分比的)。因此,我的最终结果应该是: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来实现这个算法。我不太喜欢数学,所以我不确定这类计算是否有名字。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-25 05:59:18

您可以编写如下函数:

代码语言:javascript
复制
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;
}

其中$startValue是初始值(在索引0处),$step是每次迭代时的增值或子值,$nbEntries是初始值之后的条目数。

例如:

代码语言:javascript
复制
print_r(getArrayEquidistant(50, 20, 10));

会给你:

代码语言:javascript
复制
Array
(
    [0] => 50
    [1] => 70
    [2] => 30
    [3] => 90
    [4] => 10
    [5] => 110
    [6] => -10
    [7] => 130
    [8] => -30
    [9] => 150
    [10] => -50
)
票数 0
EN

Stack Overflow用户

发布于 2013-03-25 05:55:39

如果我对你的理解是正确的,这应该是可行的:

代码语言:javascript
复制
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;
}

您可以像这样使用这个函数:

代码语言:javascript
复制
$PointsArray = pointsArray(50, 5); // {50,70,30,90,10}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15608454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档