Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
1

Выплатить наименьшим количеством купюр сумму, введенную пользователем

05.10.2018, 12:28. Показов 2631. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Скажите, что можно исправить в моем решении следующей задачи.
Пользователь ввод число, которое нужно выплатить (разменять) наименьшим количеством купюр.
Купюры: 64, 32, 16, 8, 4, 2, 1.
Я заметил последовательность в этих купюрах, каждая следующая меньше предыдущей в 2 раза. Думаю можно решить циклом, но я не придумал как и решил задачу примитивно.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include <iostream>
using namespace std;
 
void main()
{
    int n;
    cout << " Enter N = ";
    cin >> n;
    int b64 = 0, b32 = 0, b16 = 0, b8 = 0, b4 = 0, b2 = 0, b1 = 0;
 
    do {
        if (n / 64 >= 1) {
            n -= 64;
            b64++;
        }
        else {
            if (n / 32 >= 1) {
 
                n -= 32;
                b32++;
            }
            else
                if (n / 16 >= 1) {
                    n -= 16;
                    b16++;
                }
                else
                    if (n / 8 >= 1)
                    {
                        n -= 8;
                        b8++;
                    }
                    else
                        if (n / 4 >= 1) {
                            n -= 4;
                            b4++;
                        }
                        else
                            if (n / 2 >= 1) {
                                n -= 2;
                                b2++;
                            }
                            else
                                if (n / 1 >= 1) {
                                    n -= 1;
                                    b1++;
                                }
        }
    } while (n != 0);
    cout << " b64 : " << b64 << endl;
    cout << " b32 : " << b32 << endl;
    cout << " b16 : " << b16 << endl;
    cout << " b8 : " << b8 << endl;
    cout << " b4 : " << b4 << endl;
    cout << " b2 : " << b2 << endl;
    cout << " b1 : " << b1 << endl;
}
Темы, которые прошел: if, switch, for, while.
Помогите, пожалуйста, в решении этой задачи
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2018, 12:28
Ответы с готовыми решениями:

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

Как наименьшим количеством купюр выплатить сумму
В Системландии используются денежные купюры достоинством 1,2,4,8,16,32 и 64 ландика. Как наименьшим...

Как наименьшим количеством купюр можно выплатить сумму n?
В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64 денежные...

Выплатить сумму п наименьшим количеством указанных денежных купюр
В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано...

4
392 / 262 / 193
Регистрация: 02.05.2017
Сообщений: 1,003
05.10.2018, 12:50 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
    int costs[] = {1,2,4,8,16,32,64},num(0);
    cin >> num;
    int arr[num+1];
    arr[0] = 0;
    for(int i = 1;i<=num;++i){
        arr[i] = arr[i-1]+1;
        for(int j = 0;j<7;++j)if(costs[j] <= i)arr[i] = min(arr[i],arr[i-costs[j]]+1);
    }
    cout << arr[num];
 
    cout << endl;
    return 0;
}
Мб неправильно понял,но это вроде обычная задача "банкомат" или задача о "неограниченном рюкзаке". Хотя тут по моему с такими купюрами можно и нужно обычным жадным алгоритмом

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
 
int main()
{
    int costs[] = {1,2,4,8,16,32,64},num(0),counter(0);
    cin >> num;
    while(num > 0){
        for(int i = 6;i>=0;--i)if(!(num % costs[i]) && num >= costs[i]){
            num -= costs[i];
            ++counter;
            break;
        }
    }
    cout << counter;
 
    cout << endl;
    return 0;
}
Вот так, по моему
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
05.10.2018, 13:50 3
А просто представить число в двоичной системе счисления...
Хотя есть ньанс. Число может быть больше 127. Но это обходится элементарно...
0
215 / 162 / 52
Регистрация: 09.12.2017
Сообщений: 520
05.10.2018, 22:22  [ТС] 4
Спасибо за решение. Вот только вопрос, в условии задачи сказано, что нужно выводить количество нужных купюр отдельно.
Например, пользователь вводит число 66. Нужно вывести:
банкнот 64: 1
банкнот 32: 0
банкнот 16: 0
банкнот 8: 0
банкнот 4: 0
банкнот 2: 1
банкнот 1: 0
Как это реализовать?

Добавлено через 1 минуту
Спасибо за решение. Вот только вопрос, в условии задачи сказано, что нужно выводить количество нужных купюр отдельно.
Например, пользователь вводит число 66. Нужно вывести:
банкнот 64: 1
банкнот 32: 0
банкнот 16: 0
банкнот 8: 0
банкнот 4: 0
банкнот 2: 1
банкнот 1: 0
Как это реализовать?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
06.10.2018, 06:38 5
C++
1
2
3
4
for(int k=64; k>0; k/=2) {
 cout << "банкнот " << k << "- " << N/64 << endl;
 N /= k; 
}
0
06.10.2018, 06:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2018, 06:38
Помогаю со студенческими работами здесь

Как наименьшим количеством денежных купюр можно выплатить сумму N
1)В некоторой стране используются денежные купюры достоинством в 1, 2, 5, 10, 20, 50. Дано...

Определить, каким наименьшим количеством денежных купюр можно выплатить сумму N
В некоторой стране используются денежные купюры достоинством в 1,2,4,8,16,32 и 64.дано натуральное...

Определить, каким наименьшим количеством денежных купюр можно выплатить сумму N
В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано...

Каким наименьшим количеством денег можно выплатить указанную сумму
В некотором государстве пользуются деньгами номиналом 1, 2, 4, 8, 16, 32 и 64. Каким наименьшим...


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

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