我寫了一個簡單的硬幣更改算法,該算法目前可以找到所需的硬幣數量,以便與購買所需金額相匹配。我試圖對它進行修改,以便跟蹤每種面額的最小硬幣數量,並且我會下降一點。所以,如果你將數字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