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
$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 回答
0

一种方法是从“最高”徽章开始,减去所需的数字,然后将其余部分转换为下一个徽章。所以:

  1. 拿走一枚金徽章。
  2. 将所有剩余的金色徽章转换为银色。
  3. 拿走五个银徽章。
  4. 将所有剩余的银色徽章转换为青铜。
  5. 拿走10个青铜徽章。

如果任何“带走”步骤失败,则他们没有资格获得徽章。这很简单,修改它以适应其他徽章数量或汇率是微不足道的。

于 2012-05-30T03:36:43.743 回答