Итак, я создаю алгоритм замены монет, который принимает значение N и любое количество номиналов, и если у него нет 1, я должен автоматически включать 1. Я уже сделал это, но есть недостаток, теперь у меня есть 2 матрицы, и мне нужно использовать 1 из них. Возможно ли переписать S [i] матрицу и все еще увеличить размер массива .... Также как я могу найти наивысшее достоинство, а второе - наименьшее? Должен ли я просто сортировать его в наивысшем до наименьшего, чтобы облегчить его или есть более простой способ поиска их один за другим?Жадный алгоритм для смены монет C++
int main()
{
int N,coin;
bool hasOne;
cout << "Enter the value N to produce: " << endl;
cin >> N;
cout << "Enter number of different coins: " << endl;
cin >> coin;
int *S = new int[coin];
cout << "Enter the denominations to use with a space after it" << endl;
cout << "(1 will be added if necessary): " << endl;
for(int i = 0; i < coin; i++)
{
cin >> S[i];
if(S[i] == 1)
{
hasOne = true;
}
cout << S[i] << " ";
}
cout << endl;
if(!hasOne)
{
int *newS = new int[coin];
for(int i = 0; i < coin; i++)
{
newS[i] = S[i];
newS[coin-1] = 1;
cout << newS[i] << " ";
}
cout << endl;
cout << "1 has been included" << endl;
}
//system("PAUSE");
return 0;
}
Я хотел бы предложить только сортируя их в порядке вам нужно. Я не уверен, почему вы добавляете 1, если «необходимо» - что относительно валют, у которых нет монеты со значением 1? Например, с 1950 по 2000 год [Лира монеты] (https://en.wikipedia.org/wiki/Coins_of_the_Italian_lira) использовались с немногими, если таковые имеются, 1 лирские монеты, оставшиеся в обращении. –
да, но мы не хотим ситуации w здесь 33 мы не можем получить его, потому что нет 1, так что это необходимо – Darkflame
Если пользователь вводит ввод, который не имеет смысла, вы должны сообщить им. У вас нет возможности узнать, входила ли ошибка в 33 для суммы или не включала 1 в набор монет. Вы добавляете 1, нужно ли это или нет. –