最少量变化的算法

时间:2011-03-08 07:39:48

标签: algorithm coin-change

是的我知道这里有类似的帖子但是经过仔细阅读后我仍然卡住了,因为我对编程很新,并且所给出的答案都不足以解决我的问题。


问题。 编写一种有效的ACL(算法计算机语言)算法,给定一个项目的成本(小于或等于一美元),给出买方所需的50美分,20美分,10美分,5美分和1美分硬币的数量如果他们交出1美元就收到。您必须最小化更改中的硬币数量。


这个问题与任何特定的编程语言无关,答案只能使用简单的ACL语言,如if,else-while,while循环,不能使用数组或其他高级命令。

我在这里:

在这里输入代码算法最小变化量

{
    int cost, fifty, twenty, ten, five, one;

    fifty = 0;
    twenty = 0;
    ten = 0;
    five = 0;
    one = 0;

    read (cost);
    if (cost <= 50)
    {
        fifty = 1;

完成代码,谢谢你的帮助!如果你看到任何歧义或者可以帮我简化代码,请告诉我。


Algorithm how much change
{
    int cost, change, fifty, twenty, ten, five, one;

    fifty = 0;
    twenty = 0;
    ten = 0;
    five = 0;
    one = 0;

    read (cost);
    change = 100 - cost;

    if (change >= 50)
    {
        fifty = fifty + 1;
        change = change - 50;
    }
    while (change >= 20)
    {
        twenty = twenty + 1;
        change = change - 20;
    }
    while (change >= 10)
    {
        ten = ten + 1;
        change = change - 10;
    }
    while (change >= 5)
    {
        five = five + 1;
        change = change - 5;
    }
    while (change >= 1)
    {
        one = one + 1;
        change = change - 1;
    }

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

5 个答案:

答案 0 :(得分:2)

实际上,成本&gt; = 50只需要检查一次,但这更通用(对于超过1美元的情况)

while (cost >= 50)
{
fifty++;
cost -= 50;
}
while (cost >= 20)
{
twenty++;
cost -=20;
}
...

答案 1 :(得分:2)

对于你的特定变化金额,我相信一个简单的贪婪天真“挑选最大,直到我不能再”的策略将起作用。

例如:

  1. 在50的金额大于变化金额之前,我可以选择多少50?跟踪该数字的50,从总数中减去该数量
  2. 重复20年代,10年代等
  3. 然而,贪婪的方法并不总是如此。有关“常规”解决方案,请参阅Coin Change - Algorithmist

答案 2 :(得分:1)

由于这听起来像是家庭作业,我不会马上给出答案,但会给你一个正确方向的暗示。

让我们说你的计划中有一点意义。你还有一定的回报,让我们说80美分。如何获得一枚肯定必须返回的硬币?

答案 3 :(得分:1)

提示:从最大的硬币开始,找出你可以使用的最大数量,然后转到第二大硬币并重复。看起来他们通过使用二十枚硬币而不是25升来让你更容易。

答案 4 :(得分:0)

enter image description here

more detailed:

enter image description here

and even a brute force algorithm which is O(d M^d)

enter image description here
This is from Max Alekseyev , University of South Carolina cse