这是什么类型的数学或编程问题

时间:2019-01-05 06:58:05

标签: php math

我已经解决了这个问题(请参见下面的代码),但是对于结果函数我没有一个令人满意的名字。此外,我想更广泛地探讨这个问题,但我不知道我在寻找什么。我曾经尝试过“循环数学”,“时钟问题”,甚至还记得用monad来解决这个原理,但是我找不到我看到的地方。

问题:给定一组连续的数字,它们像时钟1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4..一样绕圆(在我的情况下为色阶),并给定距离(以整数表示),我想计算结果数在那个圆形系列上。 因此,如果时钟显示5,而我增加9个小时,则结果应为2。

5+9=23-7=8

问题是我怎么称呼它。这是PHP中的解决方案:

function circularmath($strExpression = "2+2" , $top = 355 ){
$result = 0;
if(preg_match('/^\d+[+-]\d+$/',$strExpression)){
    list($n1,$op,$n2)=preg_split('/([+-])/',$strExpression, null, PREG_SPLIT_DELIM_CAPTURE);
    $result =($op==="+")? $n1+$n2:$n1-$n2;
    if($result < 0){
        $result=$top+$result;
    }elseif($result > $top){
        $result=$result-$top;
    }
  }
 return $result;
}

$foo = circularmath("352+4");
echo $foo;

1 个答案:

答案 0 :(得分:0)

感谢Thomas G和ggorlen。实际上,它是模块化算术,它可以产生更好的代码:

        function mod($a, $n) {
            return ($a % $n) + ($a < 0 ? $n : 0);
        }
        function circularmath($strExpression = "2+2" , $top = 355 ){
            $result = null;
            if(preg_match('/^\d+[+-]\d+$/',$strExpression)){
                list($n1,$op,$n2)=preg_split('/([+-])/',$strExpression, null, PREG_SPLIT_DELIM_CAPTURE);
                $result =($op==="+")? $n1+$n2:$n1-$n2;
                $result = mod($result , $top) ;
            }
        return $result;
        }
        $foo = circularmath("352+4")."\n";
        echo "f:".$foo;