0

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

这在实际比分、洞的让分和球员的让分中都有体现。

例如:如果球员打出 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 是该洞让分的变量,$player 是球员的让分 & $score 是球员的得分。

我需要计算出允许超过 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;
}
4

2 回答 2

2

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

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

例如

让分 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
于 2013-04-23T21:14:02.470 回答
1

试试这个编辑过的变体

function handicapCalc($hole, $player, $score){
    $finalScore = $score - floor($player / 18) - 
        ((($player % 18) > 0 && ($player % 18) <= $hole) ? 1 : 0);
    return $finalScore;
}
于 2013-04-23T21:15:14.497 回答