7

私は最近、プロジェクトオイラーの問題セットの1つに取り組んでいて、この奇妙な問題に遭遇しました。最初の解決策で問題を正しく解決しましたが、他のバージョンが期待どおりに機能しない理由がわかりません。

動作するコードは次のとおりです。

asort($card_count, SORT_NUMERIC);
$card_count = array_reverse($card_count, true);

そして、これはそうではないコードです:

arsort($card_count, SORT_NUMERIC);

これは私が変更する唯一の行であり、最終結果に大きな違いをもたらします。これはどうですか?

4

1 に答える 1

4

この問題は、配列内の等しい値を並べ替えることで発生します。配列を取ります:

$arr = array(
    'a' => 1,
    'b' => 1,
    'c' => 1,
    'd' => 1
);

asort($arr, SORT_NUMERIC)この配列を呼び出すと、配列が逆になります。したがって、コードの行は次のとおりです。

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);

配列を元の順序に戻します。

したがって、配列を次のように変更すると、より高い値が1つ追加されます。

$arr = array(
    'a' => 1,
    'b' => 1,
    'c' => 2,
    'd' => 1
);

asort($arr, SORT_NUMERIC);
$arr = array_reverse($arr, true);

降伏します:

Array
(
    [c] => 2
    [a] => 1
    [b] => 1
    [d] => 1
)

その間

arsort($arr, SORT_NUMERIC);

降伏します:

Array
(
    [c] => 2
    [d] => 1
    [b] => 1
    [a] => 1
)

うまくいけば、これは問題にいくつかの光を当てます...

于 2012-07-23T20:51:22.693 に答える