Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 3
1

Сдача наименьшим количеством монет

17.09.2018, 12:57. Показов 5753. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! я начал изучать С/С++ и вот такая задача попалась.
В обращении имеются монеты 1-,5-,10-,50-копеечного
достоинства. Напишите программу, определяющую сдачу
наименьшим количеством монет.
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
26
27
28
29
#include <iostream>
 
using namespace std;
 
int
count(int n, const int *c, int pos)
{
    if (n == 0) {
        return 0;
    }
    int tmp = n / c[pos];
    if (tmp > 1) {
        return min(tmp + count(n % c[pos], c, pos - 1), tmp - 1 + count(n - (tmp - 1) * c[pos], c, pos - 1));
    } else if (tmp) {
        return tmp + count(n % c[pos], c, pos - 1);
    } else {
        return count(n, c, pos - 1);
    }
}
 
int
main()
{
    int coins[] = {1, 5, 10, 50};
    int n;
    cin >> n;
    cout << count(n, coins, sizeof(coins) / sizeof(coins[0]) - 1);
    return 0;
}
Код вроде бы как правильный, но думаю лучше кто-то проверит
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.09.2018, 12:57
Ответы с готовыми решениями:

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

Сдача по 10, 5, 2 и 1 руб. минимальным количеством монет
Добрый вечер,помогите сделать задачу попроще или поменьше.. Напишите программу, рассчитывающую...

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

Выплатить наименьшим количеством купюр сумму, введенную пользователем
Здравствуйте! Скажите, что можно исправить в моем решении следующей задачи. Пользователь ввод...

6
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
17.09.2018, 13:12 2
habib27, а разве не
C++
1
cout << (n / 50) + (n % 50) / 10 + ((n % 50) % 10) /  5 + (((n % 50) % 10) % 5);
1
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 3
17.09.2018, 13:19  [ТС] 3
Ага, ну это кстати вариант

Добавлено через 2 минуты
А вообще как код подходит под условие задачи?
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
17.09.2018, 13:25 4
Цитата Сообщение от habib27 Посмотреть сообщение
А вообще как код подходит под условие задачи?
Не думаю.
Непонятно зачем там рекурсия, даже если для произвольного массива делать, там нужны сортировка и цикл.
0
0 / 0 / 0
Регистрация: 17.09.2018
Сообщений: 3
17.09.2018, 18:14  [ТС] 5
Можете подсказать, пожалуйста, как тогда переделать легче?
Я новичок, а задачу надо срочно сдать

Добавлено через 4 часа 40 минут
А если так переделать?
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>
 
int main(){
   int n;
    do{
        std::cout << "Zdacha naimenshum kolichestvom monet= ";
        std::cin >> n;
    }while(n < 0 || n > 50);
    
    int coins[] = {50, 10, 5, 1};
    int change = 50 - n;
    int i = 0;
    while (change > 1)
        if (change / coins [i] != 0){
            change -= coins[i];
            std::cout << coins[i] << "";
        }else
            ++i;
            
    if (change == 1)
        std::cout << "1";
    std::cout << std::endl; 
    
    return 0;
}
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
17.09.2018, 18:25 6
Лучший ответ Сообщение было отмечено habib27 как решение

Решение

Цитата Сообщение от habib27 Посмотреть сообщение
А если так переделать?
Да ерунда какая-то получается.
Как-то так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main(){
   int n;
   do{
       std::cout << "Zdacha naimenshum kolichestvom monet= ";
       std::cin >> n;
   }while(n < 0); 
   int ncoins = 0;
   int coins[] = {50, 10, 5, 1}; 
   int size = 4;
   for(int i = 0; i < size; i++) {
       ncoins += n / coins[i];
       n %= coins[i];
   }    
   std::cout << ncoins << std::endl;     
   return 0;
}
1
2 / 1 / 1
Регистрация: 17.09.2018
Сообщений: 3
17.09.2018, 20:03 7
Лучший ответ Сообщение было отмечено habib27 как решение

Решение

перечисление всех копеек в консоли

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
#include <iostream>
 
int main()
{
    int money;
    int coins[] = {50, 10 , 5 , 1};
    int i = 0; 
 
    std::cout << "Please enter the amount of money: ";
    std::cin >> money;
    std::cout << std::endl <<"Your change: ";
 
    while(money > 0){
 
        if(money % coins[i] != money){
 
            money -= coins[i];
 
            std::cout << coins[i] << " ";
        }
        else i++;
    }
    return 0;
}
пример :
Сдача наименьшим количеством монет
1
17.09.2018, 20:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.09.2018, 20:03
Помогаю со студенческими работами здесь

Упорядочить строку с наименьшим количеством нечетных чисел по убыванию
Упорядочить строку с наименьшим количеством нечетных чисел по убыванию.

Как наименьшим количеством купюр можно выплатить денежную сумму x
надо ввести натуральное число x , и каким наименьшим количеством купюр можно выплатить денежную...

В массиве целых чисел найти количество чисел с наименьшим количеством цифр
9. В массиве целых чисел найти количество чисел с наименьшим количеством цифр. Например, в массиве...

Поменять в массиве местами строку с наибольшим и строку с наименьшим количеством различных элементов
Помогите, пожалуйста, решить задачу на С++ . Дан массив действительных чисел размера m на n, где m...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru