1

スコアに基づいて賞品を配布しようとしています。TIEに関しては、私のロジックに問題があります。3 人以上が引き分けになった場合の論理的指針を誰か教えてもらえますか?

更新: 目標はこれです --

  1. 結ばれた人々の配列を作成します(それらのみ)
  2. それらの人々がどの位置にいるかを知ってください。

スキミングできるいくつかのサンプル フェーズがあります。

例 1 - 0 タイで動作

<?php
function give_prize($a, $b) {return;}

$prize = array(500, 250, 75);

$user = array(
    'user1' => 650,
    'user2' => 500,
    'user3' => 200,
    'user4' => 100,
);

$prize_count = count($prize);

for ($i = 0; $i < $prize_count; $i++) {
    give_prize($user[$i], $prize[$i]);
}

例 2 - 1 つのネクタイで動作する (それは良い方法ですか?)

<?php   
for ($i = 0; $i < $prize_count; $i++) {

    if (isset($user[$i+1])) {
        if ($user[$i] == $user[$i++]) {
            // My Tie breaker code
        }
    }
}

しかし、3 人か 4 人の同点の場合はどうすればよいでしょうか。上記に従い、さらに if チェックを行う必要がありますか?

4

1 に答える 1

6

まず、ユーザーをスコアでグループ化し、それらのグループを降順に並べ替えます。それが完了すると、ルールに関係なく、賞品を簡単に割り当てることができます。

$usersByScore = array();
foreach ($user as $name => $score) {
    $usersByScore[$score][] = $name;
}
krsort($usersByScore);

たとえば、これは入力を$user

$user = array(
    'user1' => 500,
    'user2' => 400,
    'user3' => 750,
    'user4' => 500,
);

$usersByScore:

$usersByScore = array(
    750 => array('user3'),
    500 => array('user1', 'user4'),
    400 => array('user2'),
);

これで、好きなように賞品を発行できます。

于 2012-07-02T22:05:22.330 に答える