我需要使用PHP函数计算高尔夫分数,但我无法提出正确的等式

时间:2013-04-23 21:07:27

标签: php math

我正在编写一个函数来计算高尔夫球比赛的球员得分(不是标准的高尔夫球,而是自定义比赛)。

这是实际得分,洞的差点和球员的差点。

例如:如果玩家射击6,并且该玩家的差点为6且漏洞差距为4,则该玩家将在该洞获得5分。原因如下:

如果球员的差点小于或等于球洞的差点,则他们从实际得分中得到-1分。在18洞高尔夫球场上,球洞的差距在1到18之间。因此,如果球员的差点为18,他们将从每个洞的得分中获得-1分。因此,只要玩家的差点为18或更低,我就很容易理解。我遇到的问题是如果球员的差点超过18,如何计算这个数。一名球员的差点在1到99之间。

因此,如果一名球员的差点是21,他们将在所有18洞获得-1分。那些障碍的洞是1,2和& 3他们在这些洞上还会得到额外的-1分。因此,如果球员的差点是36,那么所有球洞的得分都会为-2分。

这是我到目前为止的功能:

function handicapCalc($hole,$player,$score){
    if($player <= 18){
        if($hole <= $player){
            $finalScore=$score-1;
        }else{
            $finalScore=$score;
        }
    }else{
        //FIGURE SCORE IF HANDICAP IS LARGER THEN 18
    }
    return $finalScore;
}
$ hole是球洞差点的变量,$球员是球员的差点&amp; $得分是玩家的得分。

我需要计算一个允许超过18的差点的计算。

感谢您提供任何帮助。


编辑[已解决]

function handicapCalc($holeHandicap,$playerHandicap,$holes,$score){
    $perHoleHandicap=floor($playerHandicap/$holes);
    $leftOvers=$playerHandicap % $holes;

    if($perHoleHandicap >= 1){
        $firstScore=$score-$perHoleHandicap;
        if($leftOvers >= $holeHandicap){
            $finalScore=$firstScore-1;
        }else{
            $finalScore=$firstScore;
        }
    }else{
        if($perHoleHandicap >= $holeHandicap){
            $finalScore=$score-1;
        }else{
            $finalScore=$score;
        }
    }
    return $finalScore;
}

2 个答案:

答案 0 :(得分:2)

如果我正确理解规则,你只需要一些模数:

per-hole-handicap: floor($player_handicap / $number_of_holes)
left_over_points = $player_handicap modulo $number_of_holes

e.g。

15岁的差点,打18洞:

per-hole-handicap: floor(15/18) -> 0
left_over_points = 15 mod 18 -> 15

so you've got 15 points to distribute, giving a -1 for the first 15 holes

37洞的差点,打18洞:

per-hole-handicap: floor(37 / 18) -> floor(2.055) -> -2 points for all holes
left_over_points = 37 mod 18 -> 1 -> 1 extra point, so -1 for the first hole

答案 1 :(得分:1)

尝试此编辑后的变体

function handicapCalc($hole, $player, $score){
    $finalScore = $score - floor($player / 18) - 
        ((($player % 18) > 0 && ($player % 18) <= $hole) ? 1 : 0);
    return $finalScore;
}