我写了一个简单的硬币更改算法,该算法目前可以找到所需的硬币数量,以便与购买所需金额相匹配。我试图对它进行修改,以便跟踪每种面额的最小硬币数量,并且我会下降一点。所以,如果你将数字6传递给函数,它会说所需的最小硬币数量是2(我已经有这个数字),而且硬币的组合是4美分硬币和2分硬币。这里是我的代码:修改硬币更改问题以跟踪硬币的使用情况(不是最小数量)
coins[5] = {1, 2, 4, 17, 28} //effectively kills any use of greedy algortihms
count[m];
int coins_needed_for(int m) {
//Initilization- fills array w/ -1s
for (int z = 1; z < m+1; z++) {
count[z] = -1;
}//for
//fills in appropriate values
for (int j = 0; j < 5; j++) {
if (coins[j] < m)
count[coins[j]] = 1;
else if (coins[j] == 1)
return 1;
else
break;
}//for
//Execution
for (int p = 1; p < m+1; p++) {
if (count[p] == -1) {
int min = 10000 //poor subsitute for infinity;
for (int i = 0; i < 5; i++) {
if (coins[i] <= p) {
if (count[p-coins[i]] + 1 < min) {
min = count[p-coins[i]] + 1;
}
}//if
count[p] = min;
}//for
}//if
}//for
return count[m];
}
我明白需要什么,我只是不知道的最好的办法就是去这样做的。我应该创建另一个数组吗?如果是,它是否必须是二维的?我可以创建一个结构来保持每个硬币的计数用于每个可能的m吗?我愿意接受任何建议。我不一定在寻找一个明确的答案,只是指针和有用的建议。要求分配问题的答案是错误的。谢谢!
时,你可以使用一个贪心算法这只作品。用硬币“17”和“28”,你不能这样做。 – corsiKa 2011-04-24 00:23:21
啊......我明白了。如果我使用标准的美国货币体系,这将是非常好的,但我不是。如果你输入一个像34这样的值,我的算法会正确识别出你需要两个硬币来完成它,但它会说它需要1 28 $,1 4 $和1 2 $。回到绘图板! – thomascirca 2011-04-24 00:26:49