我写了一个简单的硬币找零算法,该算法目前可以找到与购买某物所需的数量相匹配的最小硬币数量。我正在尝试对其进行修改,以便它跟踪要使用的每种面额的最小硬币数量,但我有点不足。所以,如果你将数字 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 使用的每个硬币吗?我愿意接受任何建议。我不一定要寻找明确的答案,只是指点和有用的建议。为分配的问题寻求答案是错误的。谢谢!