【问题标题】:Coin change algorithm硬币找零算法
【发布时间】:2011-03-14 03:18:16
【问题描述】:

只想仔细检查此代码是否有任何错误,主要与我不确定的模数运算符有关。

问题是:

问题:编写一个 ACL 算法,给定物品的成本(小于或等于 1 美元),给出买家将收到的 50 美分、20 美分、10 美分、5 美分和 1 美分硬币的数量如果他们交出一美元。您必须尽量减少找零中的硬币数量。

我的解决办法是:

Algorithm coin_change
{
    int cost, change, fifty, twenty, ten, five, one;
    read(cost);
    change = 100 - cost;

    fifty = change / 50;
    change = change % 50;

    twenty = change / 20;
    change = change % 20;

    ten = change / 10;
    change = change % 10;

    five = change / 5;
    change = change % 5;

    one = change;

    print(fifty, twenty, ten, five, one);
}

我不确定的主要事情是,例如,如果变化是 93 美分,这将变为 43 美分,然后降至 3 美分。现在的问题是“change = change % 10”当变化是 3 美分时返回变化等于 3 吗?希望这是有道理的。

提前致谢。

【问题讨论】:

  • @Bill,不确定我是否同意这里的关闭,但你有可怕的蓝色菱形,这意味着我所能做的就是解释原因:-) 虽然代码相似,但这个问题专门关于模数在特定情况下的影响(原始问题有幼稚的while 解决方案,根本不使用模数)。
  • @paxdiablo:很公平。我看到他在这里的解决方案不是来自原始问题的答案,所以它是不同的。

标签: algorithm coin-change


【解决方案1】:

根据定义,3 模 10 将为您提供 3。这是除以给定数字时剩下的余数。

当你将 3 除以 10 时,你得到 0,余数为 3。所以你的算法在这个意义上是正确的。

一般来说,在计算机语言中使用模运算时唯一需要担心的是负数的处理 - 有些语言的行为会有所不同。

但你不是在胡闹负数,所以不要担心。

【讨论】:

    【解决方案2】:

    是的。

    change = change % 10 
    

    无论更改最初是 43 还是 3,这仍将返回 3。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 2023-03-02
      • 2013-12-09
      • 2016-01-25
      相关资源
      最近更新 更多