Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151

Банковские счета

04.08.2021, 21:30. Показов 11156. Ответов 12
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Банковские счета
Некоторый банк хочет внедрить систему управления счетами клиентов, поддерживающую следующие операции:

пополнение счёта клиента;
снятие денег со счёта;
запрос остатка средств на счёте;
перевод денег между счетами клиентов;
начисление процентов всем клиентам.
Вам необходимо реализовать такую систему. Клиенты банка идентифицируются именами (уникальная строка, не содержащая пробелов). Первоначально у банка нет ни одного клиента. Как только для клиента проводится операция пололнения, снятия или перевода денег, ему заводится счёт с нулевым балансом. Все дальнейшие операции проводятся только с этим счётом. Сумма на счету может быть как положительной, так и отрицательной, при этом всегда является целым числом.

Входные данные

Первая строка входных данных содержит число n (n≤50000) — количество проводимых операций. Следующие n стсрок содержат последовательность операций. Возможны следующие операции:

DEPOSIT name sum — зачислить сумму sum на счёт клиента name. Если у клиента нет счёта, то счёт создаётся.
WITHDRAW name sum — снять сумму sum со счёта клиента name. Если у клиента нет счёта, то счёт создаётся.
BALANCE name — узнать остаток средств на счету клиента name.
TRANSFER name1 name2 sum — перевести сумму sum со счёта клиента name1 на счёт клиента name2. Если у какого-либо клиента нет счёта, то ему создаётся счёт.
INCOME p — начислить всем клиентам, у которых открыты счета, p% от суммы счёта. Проценты начисляются только клиентам с положительным остатком на счету, если у клиента остаток отрицательный, то его счёт не меняется. После начисления процентов сумма на счету остается целой, то есть начисляется только целое число денежных единиц. Дробная часть начисленных процентов отбрасывается.
Выходные данные

Для каждого запроса BALANCE программа должна вывести остаток на счету данного клиента. Если же у клиента с запрашиваемым именем не открыт счёт в банке, выведите ERROR.

Примеры
Ввод
Вывод
7
DEPOSIT Ivanov 100
INCOME 5
BALANCE Ivanov
TRANSFER Ivanov Petrov 50
WITHDRAW Petrov 100
BALANCE Petrov
BALANCE Sidorov
105
-50
ERROR


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

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
#include <iostream>
#include <map>
#include <string>
using namespace std;
 
int main() {
    map <string, int> bank;
    int n; cin >> n;
    string s, num, num1, num2;
    int sum, p;
    double a;
    bool flag = false;
    for (int i = 0; i < n; i++) {
        cin >> s;
        if (s == "DEPOSIT") {
            cin >> num; 
            cin >> sum;
            bank[num] += sum;
        }
        if (s == "WITHDRAW") {
            cin >> num;
            cin >> sum;
            bank[num] -= sum;
        }
        if (s == "BALANCE") {
            cin >> num;
            for (auto it = bank.begin(); it != bank.end(); ++it) {
                if (it->first == num)
                    flag = true;
            }
            if (flag == true)
                cout << bank[num];
            else
                cout << "ERROR";
            flag = false;
        }
        if (s == "TRANSFER") {
            cin >> num1 >> num2;         
            cin >> sum;
            bank[num1] -= sum;
            bank[num2] += sum;
        }
        if (s == "INCOME") {
            cin >> p;
            for (auto it = bank.begin(); it != bank.end(); ++it) {
                a = (it->second / 100.0) * p;
                it->second += a;
            }
        }
    }
    return 0;
}
Добавлено через 24 минуты
Вот если что ссылка на информатиксе
https://informatics.msk.ru/mod... rid=3766#1
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2021, 21:30
Ответы с готовыми решениями:

Банковские счета
Банковские счета. Напишите программу ведения банковских счетов. Ежемесячная ставка по банковским вкладам составляет 6% от суммы вклада....

на основе данных входного файла составить список вкладчиков(ФИО,№ счёта,сумма,год открытия счёта)Вывести в new файл инфу об открывших счёт в этом году
Решить задачу, используя структуру, содержащую члены-данные и члены-функции. Замечание. Подразумевается, что исходная информация...

Создать определения класса банковского счета. Элементы данных: имя, номер счета, сальдо. Элементы-функции: положить сум
Создать определения класса банковского счета. Элементы данных: имя, номер счета, сальдо. Элементы-функции: положить сумму на счет, снять ...

12
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
04.08.2021, 23:15
Цитата Сообщение от alimaaa Посмотреть сообщение
if (s == "BALANCE") {
cin >> num;
Тут вводится число, а по условию
BALANCE name - узнать остаток средств на счету клиента name.
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
05.08.2021, 08:20  [ТС]
num это строка
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8644 / 4479 / 1669
Регистрация: 01.02.2015
Сообщений: 13,883
Записей в блоге: 11
05.08.2021, 08:58
Мне кажется, что система на вход даёт строки типа "TRANSFER Ivanov Petrov 50"
И каждая такая строка оказывается в переменной s целиком без разделения на подстроки. Для моего примера получается, что
s=="TRANSFER Ivanov Petrov 50"
Таким образом, программа не находит соответствия для переменной s и выдаёт неправильный результат.

Кстати, т.к. первые буквы у команд разные, для решения "олимпийской" задачи с гарантированными корректными входными данными можно сравнивать не строки, а первые символы. В "жизни" так нельзя, а здесь можно.
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
05.08.2021, 09:03  [ТС]
Тк я ввожу строку способом cin >> s, а не getline(cin, s), то строку вводится пока не встретит первый пробел. Те s == Ivanov
1
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.08.2021, 11:24
Цитата Сообщение от alimaaa Посмотреть сообщение
num это строка
Да, действительно. Но там цикл не нужен. Map умеет находить элемент без перебор всего.
Цитата Сообщение от alimaaa Посмотреть сообщение
a = (it->second / 100.0) * p;
Не проверяется что it->second > 0.
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
05.08.2021, 12:25  [ТС]
Добавила проверку, все равно не проходит


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
#include <iostream>
#include <map>
#include <string>
using namespace std;
 
int main() {
    map <string, int> bank;
    int n; cin >> n;
    string s, num, num1, num2;
    int sum, p;
    int a;
    bool flag = false;
    for (int i = 0; i < n; i++) {
        cin >> s;
        if (s == "DEPOSIT") {
            cin >> num; 
            cin >> sum;
            bank[num] += sum;
        }
        if (s == "WITHDRAW") {
            cin >> num;
            cin >> sum;
            bank[num] -= sum;
        }
        if (s == "BALANCE") {
            cin >> num;
            for (auto it = bank.begin(); it != bank.end(); ++it) {
                if (it->first == num)
                    flag = true;
            }
            if (flag == true)
                cout << bank[num];
            else
                cout << "ERROR";
            flag = false;
        }
        if (s == "TRANSFER") {
            cin >> num1 >> num2;         
            cin >> sum;
            bank[num1] -= sum;
            bank[num2] += sum;
        }
        if (s == "INCOME") {
            cin >> p;
            for (auto it = bank.begin(); it != bank.end(); ++it) {
                if (it->second > 0) {
                    a = (it->second / 100.0) * p;
                    it->second += a;
                }
            }
        }
    }
    return 0;
}
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.08.2021, 14:03
Цитата Сообщение от alimaaa Посмотреть сообщение
cout << bank[num];
Цитата Сообщение от alimaaa Посмотреть сообщение
cout << "ERROR";
Перенос строки не мешало бы добавить. Т.е "\n".
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
05.08.2021, 20:02  [ТС]
Добавила, но все также 0 тестов на информатиксе

Добавлено через 4 часа 9 минут
Пожалуйста помогите кто-нибудь

Добавлено через 1 час 24 минуты
Прошуу
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
05.08.2021, 22:33
Цитата Сообщение от alimaaa Посмотреть сообщение
но все также 0 тестов на информатиксе
Этот Ъ информатикс пять минут задачу решаешь - полчаса бадаешься с выводом
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
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
#include <sstream>
 
void operations(std::map<std::string, int> & book, std::string & str)
{
    static const std::string ops[] { "DEPOSIT", "WITHDRAW", "BALANCE", "TRANSFER", "INCOME" };
    std::stringstream input(str);
    input >> str;
 
    size_t x = std::find_if(std::begin(ops), std::end(ops), [&](std::string a){ return a == str; }) - ops;
    switch(x)
    {
    case 0:
    {
        input >> str;
        int val;
        input >> val;
        book[str] += val;
        break;
    }
    case 1:
    {
        input >> str;
        int val;
        input >> val;
        book[str] -= val;
        break;
    }
    case 2:
    {
        input >> str;
        std::cout << ( book.find(str) != book.end() ? (std::to_string(book[str]) + "\n") : "ERROR\n" );
        break;
    }
    case 3:
    {
        input >> str;
        std::string temp;
        input >> temp;
        int val;
        input >> val;
        book[str] -= val;
        book[temp] += val;
        break;
    }
    case 4:
    {
        int val;
        input >> val;
        for(auto & i : book)    
            if(i.second > 0)
                i.second += (i.second * val) / 100;
        break;
    }
    default:
        break;
    }
}
 
int main()
{
    std::map<std::string, int> accounts;
    std::string str;
    while(std::getline(std::cin, str) && str.size())
        operations(accounts, str);
 
    return 0;
}
Добавлено через 7 минут
Цитата Сообщение от alimaaa Посмотреть сообщение
Добавила, но все также 0 тестов на информатиксе
Кстати,
Цитата Сообщение от alimaaa Посмотреть сообщение
Первая строка входных данных содержит число n (n≤50000) — количество проводимых операций. Следующие n стсрок содержат последовательность операций. Возможны следующие операции:
Цитата Сообщение от alimaaa Посмотреть сообщение
C++
1
int n; cin >> n;
Там ж нет ничего про n строк мож отсюда и проблема.

Добавлено через 7 минут
Цитата Сообщение от Folian Посмотреть сообщение
C++
1
size_t x = std::find_if
Чёт я разошёлся, обычный std::find годится ж.
3
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
05.08.2021, 22:41
Кстати да, в оригинальном условии никакого числа n и нет.
0
8 / 7 / 1
Регистрация: 08.04.2021
Сообщений: 151
05.08.2021, 22:57  [ТС]
Спасибо большое!!!
0
10 / 10 / 0
Регистрация: 05.04.2023
Сообщений: 47
01.05.2024, 15:47
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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    map <string, int> mp;
    int sum, p;
    string s, name1, name2;
    while(cin >> s){
        if (s == "DEPOSIT"){
            cin >> name1;
            cin >> sum;
            mp[name1] += sum;
        }
        else if (s == "WITHDRAW"){
            cin >> name1;
            cin >> sum;
            mp[name1] -= sum;
        }
    else if (s == "BALANCE"){
            cin >> name1;
            if (mp.count(name1) == 0)
                cout << "ERROR" << endl;
            else
                cout << mp[name1] << endl;
        }
        else if (s == "TRANSFER"){
            cin >> name1;
            cin >> name2;
            cin >> sum;
            mp[name1] -= sum;
            mp[name2] += sum;
        }
        else if (s == "INCOME"){
            cin >> p;
            for(auto[key,value]: mp){
                if (mp[key] >= 0)
                    mp[key] += mp[key]*p / 100;
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.05.2024, 15:47
Помогаю со студенческими работами здесь

Банковские проценты
Добрый вечер, данная задача уже поднималось, однако решения я там так и не нашёл, поэтому хотел бы выложить её здесь ещё раз: Вклад в...

Структура ORDER с полями "номер счета плательщика", "номер счета получателя" и "сумма платежа"
написать структуру ORDER. с полями 1.номер счета плательщика 2.счета получателя 3.сумма платежа

Базовый класс Deposit и три класса-наследника (банковские вклады)
Здравствуйте. История такова: есть базовый класс Deposit и три класса-наследника (банковские вклады), в них же переопределенная виртуальная...

Задача "Банковские проценты"
Вот условие: Вот решение с сайта-источника: double x,p,y; int years = 0; cin&gt;&gt;x&gt;&gt;p&gt;&gt;y; while (x&lt;y) { x *= (1 +...

Возможность пополнения счета
Здравствуйте. Необходимо сделать пополнение счета в своей программе(Как например в онлайн играх, указывают номер/карту, переводят и вот...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru