Я написал простой алгоритм смены монет, который в настоящее время находит минимальное количество монет, необходимое для соответствия сумме, необходимой для покупки чего-либо.Я пытаюсь изменить его так, чтобы он отслеживал минимальное количество монет каждого номинала, которое будет использоваться, и я немного отстала.Таким образом, если вы передадите число 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?Я открыт для любых предложений.Я не обязательно ищу определенный ответ, просто указатели и полезные советы.Запрашивать ответ на поставленную задачу просто неправильно.Спасибо!