問題在於儘量減少提供確切更改所需的硬幣數量。總是會有1個可用的硬幣,因此問題總會有解決方案。詳盡搜索:用於更改的最小硬幣數量。在使用遞歸時保留解決方案陣列
一些樣品硬幣集與他們的解決方案爲40美分的量:
硬幣設置爲{1,5,10,20,25},溶液= {0,0,0,2,0}
硬幣組= {1,5,10,20},溶液= {0,0,0,2}
實現返回正確分鐘。硬幣數量,但我無法保留正確的解決方案數組。
int change(int amount, int n, const int* coins, int* solution) {
if(amount > 0) {
int numCoinsMin = numeric_limits<int>::max();
int numCoins;
int imin;
for(int i = 0; i != n; ++i) {
if(amount >= coins[i]) {
numCoins = change(amount - coins[i], n, coins, solution) + 1;
if(numCoins < numCoinsMin) {
numCoinsMin = numCoins;
imin = i;
}
}
}
solution[imin] += 1;
return numCoinsMin;
}
return 0;
}
採樣運行:
int main() {
const int n = 4;
int coins[n] = {1, 5, 10, 20, 25};
int solution[n] = {0, 0, 0, 0, 0};
int amount = 40;
int min = change(amount, n, coins, solution);
cout << "Min: " << min << endl;
print(coins, coins+n); // 1, 5, 10, 20
print(solution, solution+n); // 231479, 20857, 4296, 199
return 0;
}
您是否可以更具體地瞭解您想要發生的事情?我不確定你的意思是「保留正確的解決方案數組」 –
用示例運行更新了問題。例如,當我運行它40時,解決方案數組應該是0,0,0,2。表示只需要2個20美分的硬幣。但我得到那些大數字。 – blaze
除了遞歸之外,這個問題還需要什麼嗎?像你有使用數組?我問的原因是我不確定我會這樣做,除非你因爲某種原因被迫使用數組 –