1

私は頭がねじれている非常に興味深い問題を抱えています。私は、ユーザーと賞 (バッジと呼ばれる) で構成される小さなシステムに取り組んでいます。次の基準に応じてユーザーに授与される特別なバッジがあります: ブロンズ バッジ 10 個、シルバー バッジ 5 個、ゴールド バッジ 1 個。これは非常に単純ですが、ユーザーが 8 つのブロンズ バッジ、7 つのシルバー バッジ、1 つのゴールド バッジを持っている場合、追加の 2 つのシルバー バッジをブロンズ バッジとして使用できます。

これは、ユーザーが「より高い」バッジを配布できるようになるたびに発生します。繰り返しになりますが、たとえば、ブロンズ バッジを 8 個、シルバー バッジを 4 個、ゴールド バッジを 4 個持っている場合、ゴールド バッジ 2 個をブロンズに、1 個をシルバーに「変換」して、特別なバッジを獲得できます。

これを行う方法がまったくわかりません。さまざまなループ、ifs を試しましたが、適切に配布できません。多分誰かが私を助けることができますか?

4

3 に答える 3

5

ユーザーには、少なくとも 1 つのゴールド バッジ、少なくとも 6 つのシルバーまたはゴールドのバッジ、および少なくとも 16 のブロンズ、シルバー、またはゴールドのバッジが必要です。

擬似コードは

count(gold) >= 1
&& count(gold) + count(silver) >= 6
&& count(gold) + count(silver) + count(bronze) >= 16

ゴールド、シルバー、またはブロンズと交換できるダイヤモンド メダルもある場合は、それも含めます。

count(diamond) + count(gold) >= 1
&& count(diamond) + count(gold) + count(silver) >= 6
// etc

または、「メダルランク」を使用して、次のような簡単なことを行うこともできます

count(rank of gold or higher) >= 1
&& count(rank of silver or higher) >= 6
&& count(rank of bronze or higher) >= 16
于 2012-05-30T03:09:13.267 に答える
0

1 つの方法は、「最高」のバッジから始めて、必要な数を減算し、残りを次のバッジに変換することです。そう:

  1. 金バッジを1つ奪う。
  2. 残りの金バッジをすべて銀バッジに変換します。
  3. シルバーバッジを5個奪う。
  4. 残りのすべてのシルバー バッジをブロンズに変換します。
  5. ブロンズバッジを10個奪う。

「撤回」のステップのいずれかが失敗した場合、バッジの資格はありません。これは簡単で、他のバッジの数量や為替レートに合わせて変更するのは簡単です。

于 2012-05-30T03:36:43.743 に答える
0
$bank['g'] -= $price['g'];
$bank['s'] -= $price['s'];
$bank['b'] -= $price['b'];
if ($bank['b'] < 0) {
    $bank['s'] += $bank['b'];
    $bank['b'] = 0;
}
if ($bank['s'] < 0) {
    $bank['g'] += $bank['s'];
    $bank['s'] = 0;
}
if ($bank['g'] < 0) {
    //not enough cash
} else {
    //ok
}
于 2012-05-30T03:24:17.710 に答える