Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
cotypan
0 / 0 / 0
Регистрация: 18.03.2015
Сообщений: 21
1

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

18.03.2015, 23:42. Просмотров 903. Ответов 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
Ответы с готовыми решениями:

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

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

Как за минимальное количество денег группе лиц совершить переезд на трамвае?
Ловлю WA4, Задачу делал через Флойда, помогите найти ошибку или дайте рабочий...

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

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

7
bi4ugan
11 / 11 / 12
Регистрация: 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 / 19
Регистрация: 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
21 / 21 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
19.03.2015, 17:22 6
Попробуйте вот такой вариант
C++
1
2
3
4
while(ost>=10)
{
...
}
Ведь купюр меньше 10 в Вашем распоряжении нет => если остаток к выдаче меньше 9, то выдать размен нельзя.
0
SmittWesson
212 / 187 / 21
Регистрация: 04.06.2014
Сообщений: 1,308
19.03.2015, 17:35 7
Цитата Сообщение от bi4ugan Посмотреть сообщение
курс рубля к гривне считать?)
Прекращайте стебаться. Задача поставлена корректно и не важно в чём выражена, в марсианских курах или в тугриках.

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

Решение

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

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

По номеру недели выдать количество уроков в группе
Проверти пожалуйста Написать программу, которая бы по номеру дня недели...

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


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

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

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