Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cotypan
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 21
#1

Выдать наименьшее количество денег - C++

18.03.2015, 23:42. Просмотров 381. Ответов 7
Метки нет (Все метки)

Пусть имеются 10,20,50,100,200,500 гривень.Необходимо определить наименьшое количество купюр, которые необходимо использовать чтобы выдать Sum рублей.Если же сумму выдать нельзя то вывести -1.
Получается что если я ввожу сумму 67, то мне не выводится "-1".Все суммы которые невозможно вывести у меня не могут быть обозначены -1.А для сумм которые могут выданы с помощью данных купюр у меня выводится правильно наименьшее количество купюр
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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(arrcur && 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;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2015, 23:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выдать наименьшее количество денег (C++):

Наименьшее количество купюр, которыми можно выдать n гривен - C++
В банкомате имеются в достаточном количестве купюры номиналом 10, 20, 50, 100, 200 и 500 гривен. Найти минимальное количество купюр,...

Найти наименьшее число купюр, которыми можно выдать N гривен - C++
Здравствуйте! Вот несложная задача с E-olymp (№15). Только опять один тест не прошел по времени. Посмотрите, пожалуйста, как можно...

Как за минимальное количество денег группе лиц совершить переезд на трамвае? - C++
Ловлю WA4, Задачу делал через Флойда, помогите найти ошибку или дайте рабочий тест. #include&lt;iostream&gt; #include&lt;fstream&gt; #define mp...

Можно ли составить данное количество денег, используя только две из данных монет - C++
Составить С++ программу, которая выясняет - можно ли составить данное количество денег, используя только две из данных монет -1, 2, 5, 10,...

Найти количество денег, необходимое Пете, чтобы купить 3 целых упаковки конфет - C++
В магазине ириски продаются только в упаковке, по 30 штук, и стоят 60 рублей. Пионеру Пете нужно 3 целых упаковки(90 конфет), зачем -...

Посчитать количество денег, которые нужно заплатить за цветы, продающиеся группами с разной стоимостью - C++
Когда Мальвине исполнилось К лет,она пригласила друзей на свой день рождения.Буратино не долго думая попер в магаз где продают цветы чтобы...

7
bi4ugan
11 / 11 / 6
Регистрация: 27.10.2014
Сообщений: 108
Завершенные тесты: 1
19.03.2015, 00:12 #2
курс рубля к гривне считать?)
0
cotypan
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 21
19.03.2015, 00:17  [ТС] #3
bi4ugan, Нет, извините, опечатка - все в рублях или все в гривнях(одно из двух).
0
bogdan_017
21 / 21 / 11
Регистрация: 18.03.2014
Сообщений: 148
19.03.2015, 00:24 #4
всмотрись в условия. arrcurr без квадратных скобок = указатель на 1-ый элемент массива, то бишь номер ячейки в памяти. Ты этот номер нигде не изменяешь, значит он постоянный, не равен и никогда не будет равен 0, следовательно, arrcurr на конъюнкцию не влияет, его вообще можно вычеркнуть. Из условия видно, что выход из цикла произойдет только при ost == 0;

C++
1
2
3
4
5
while(arrcur && ost>0) // абсолютно идентичные условия while(ost>0)
//...
if(ost!=0)
    cout<<"-1";
else cout<<cnt;
Далее, т.к. ost == 0, условный оператор никогда true не вернет, вот у тебя и показывает вечно какое-то число cnt.
1
cotypan
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 21
19.03.2015, 16:54  [ТС] #5
bogdan_017, Все равно не работает
Bвожу 890 получаю 6(парвильно), ввожу 32 ничего не получаю(хотя должно выводится -1)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;
}
Добавлено через 15 часов 53 минуты
Если сумму вывести нелязя выводим -1.
По идее нужно проверять остаток не равен ли нулю и выводить -1. Но на деле оказывается неправильно.Помогите пожалуйста =)
0
LaHaH
20 / 20 / 15
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
19.03.2015, 17:22 #6
Попробуйте вот такой вариант
C++
1
2
3
4
while(ost>=10)
{
...
}
Ведь купюр меньше 10 в Вашем распоряжении нет => если остаток к выдаче меньше 9, то выдать размен нельзя.
0
SmittWesson
143 / 184 / 17
Регистрация: 04.06.2014
Сообщений: 1,304
19.03.2015, 17:35 #7
Цитата Сообщение от bi4ugan Посмотреть сообщение
курс рубля к гривне считать?)
Прекращайте стебаться. Задача поставлена корректно и не важно в чём выражена, в марсианских курах или в тугриках.

ТС, у Вас нет проверки на остаток. Дело в том, что 67 не делится нацело на объявленный список купюр. А если это так, то нужно значение ost, либо запомнить, либо досрочно прекратить цикл командой - break.
0
bogdan_017
21 / 21 / 11
Регистрация: 18.03.2014
Сообщений: 148
19.03.2015, 17:41 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
cotypan, теперь все интереснее=) ничего не выводится, потому что зацикливание происходит. Ты из цикла while не выходишь.

Как говорится, легче написать свое, чем вникнуть в чужое Да и не вижу смысла юзать всякие деления, остатки от деления, если можно все обычным подбором сделать.

Пусть у нас есть число N-введенная сумма и какая-то переменная, например curr, отвечающая за накручиваемую сумму.

1. Проверяем curr+500<=n? Если да, то curr+=500 и шаг 1, если нет, то шаг 2.
2. Проверяем curr+200<=n? Если да, то curr+=200 и шаг 2, если нет, то шаг 3.

//------короче таким образом проверяем и для 100, 50, 20.

6. Проверяем curr+10<=n? Если да, то curr+=10, если нет, то шаг 7.
7. Проверяем curr==n? Если да, то число N можно представить в данном виде, если нет, то вывести -1.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int main(){
int arrcur[6]={10,20,50,100,200,500};
int sum;
cin>>sum;//ââîä ñóììû
 
int curr=0, i=5, count=0;
 while (i>=0)
 {
   if (curr+arrcur[i]<=sum)
     {
       curr+=arrcur[i];
       count++;
     }
   else i--;
 }
 
if (curr==sum) printf("Count= %d",count);
else printf("-1");
 
system("Pause");
return 0;
}
Вуаля. :-)
1
19.03.2015, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2015, 17:41
Привет! Вот еще темы с ответами:

Пользователь трижды вводит достоинство купюр и их количество. Программа должна посчитать общую сумму денег - C++
Пользователь трижды вводит достоинство купюр и их количество. Программа должна посчитать общую сумму денег.

По номеру недели выдать количество уроков в группе - C++
Проверти пожалуйста Написать программу, которая бы по номеру дня недели (целому числу от 1 до 7) выдавала бы количество уроков в вашей...

Строки. Подсчитать количество заглавных букв в тексте; вывести на экран слова, имеющие наименьшее количество букв... (подправить) - C++
Дано задачу: С клавиатуры вводится строка. Составить программу, которая подсчитывает количество заглавных букв в тексте; выводит на...

По введенному номеру времени года выдать месяцы, количество дней в каждом из месяцев - C++
Программа по введенному номеру времени года (1 - зима, 2 - весна, 3 - лето, 4 - осень) должна выдавать соответствующие этому времени года...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru