是的我知道这里有类似的帖子但是经过仔细阅读后我仍然卡住了,因为我对编程很新,并且所给出的答案都不足以解决我的问题。
问题。 编写一种有效的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);
}
答案 0 :(得分:2)
实际上,成本&gt; = 50只需要检查一次,但这更通用(对于超过1美元的情况)
while (cost >= 50)
{
fifty++;
cost -= 50;
}
while (cost >= 20)
{
twenty++;
cost -=20;
}
...
答案 1 :(得分:2)
对于你的特定变化金额,我相信一个简单的贪婪天真“挑选最大,直到我不能再”的策略将起作用。
例如:
然而,贪婪的方法并不总是如此。有关“常规”解决方案,请参阅Coin Change - Algorithmist
答案 2 :(得分:1)
由于这听起来像是家庭作业,我不会马上给出答案,但会给你一个正确方向的暗示。
让我们说你的计划中有一点意义。你还有一定的回报,让我们说80美分。如何获得一枚肯定必须返回的硬币?
答案 3 :(得分:1)
提示:从最大的硬币开始,找出你可以使用的最大数量,然后转到第二大硬币并重复。看起来他们通过使用二十枚硬币而不是25升来让你更容易。
答案 4 :(得分:0)
more detailed:
and even a brute force algorithm which is O(d M^d)
This is from
Max Alekseyev , University of South Carolina cse
。