Определить наименьшее количество купюр

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
cotypan
Сообщения: 5
Зарегистрирован: 19 мар 2015, 14:24

Пусть имеются 10,20,50,100,200,500 гривень.Необходимо определить наименьшое количество купюр, которые необходимо использовать чтобы выдать Sum рублей.Если же сумму выдать нельзя то вывести -1.
Получается что если я ввожу сумму 67, то мне не выводится "-1".Все суммы которые невозможно вывести у меня не могут быть обозначены -1.А для сумм которые могут выданы с помощью данных купюр у меня выводится правильно наименьшее количество купюр.
То есть для 550, я получаю правильный ответ 2.

Код: Выделить всё

#include <iostream>
#include <iostream>
using namespace std;
 
]int main(){
int arrcur[6]={10,20,50,100,200,500};
int m = 0,ost,sum,cnt,i;
//while(( m < T ))
cin>>sum;//ввод суммы
ost=sum;//Отстаток_к_выдаче = сумме;
cnt=0;//количество купюр
while(ost>0){
  for(i=5;i>=0;--i){
   if( ost / arrcur[i] > 0) {
   cnt = cnt + ost/arrcur[i];
   ost = ost % arrcur[i];
   }
}
}
if(ost!=0)
    cout<<"-1";
else cout<<cnt;
return 0;
}
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Потому что для тех сумм, которые нельзя разложить полностью - при выходе из for остаток больше 0. Соответственно while будет крутиться до бесконечности, ибо остаток больше не изменится и выполнение никогда не дойдет до cout
ИМХО while тут лишний, достаточно одного прохода цикла for
It's a long way to the top if you wanna rock'n'roll
cotypan
Сообщения: 5
Зарегистрирован: 19 мар 2015, 14:24

Спасибо огромное!Заработало!
Ответить