Задача: объеденение филий С++

144
02 июня 2019, 14:40

Задача

С целью оптимизации компания решила соединить 4 филии в одну. Соответственно и объединить их счета в банке(У каждой филии свой счет). Банк может перевести все деньги с одного счета на другой и закрыть пустой счет. За такую операции банк берет процент от суммы объединенных счетов, который списывается с объединенного счета.

Вам положено рассчитать сколько денег будет на счету объединенной филии.

Внимание! От последовательности закрытия банковских счетов зависит размер процента, его нужно минимизировать.

Я написал код, (Таких задачи было 2, для задачи с 3-мя филиями такой способ работает) не могу понять что делаю не так, вроде процент не может быть меньше если соединять их

Суть кода : ввод кол-ва денег 4х филий, ввод процента.Сортировка по кол-ву денег. Выбор самого лучшего варианта(самая маленькая сумма). Вбрасываю самый лучший вариант в g[], сортирую еще раз, и применяю способ для 3х филий. Проходит только несколько тестов, что с кодом не так? Где и в чем ошибки?

P.S. Есть еще такой код, проходит больше тестов

#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int main() {
    ifstream inp;
    ofstream otp;
    inp.open("input.txt");
    otp.open("output.txt");
    double ans = 0, p = 0;
    vector<int> g(4);
    inp >> g[0] >> g[1] >> g[2] >> g[3] >> p;
    sort(g.begin(), g.end());
    ans = (g[0] + g[1]) * (1 - (p / 100));
    g[1] = ans;
    g.erase(g.begin());
    sort(g.begin(), g.end());
    ans = (g[0] + g[1]) * (1 - (p / 100));
    ans = (ans + g[2]) * (1 - (p / 100));
    otp << fixed << setprecision(2) << ans;
    return 0;
}
Answer 1

Нужно было поменять тип вектора, туда может попасть вещественное число. Устранил ошибку - работающий код :

#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int main() {
    ifstream inp;
    ofstream otp;
    inp.open("input.txt");
    otp.open("output.txt");
    double ans = 0, p = 0;
    vector<double> g(4);
    inp >> g[0] >> g[1] >> g[2] >> g[3] >> p;
    sort(g.begin(), g.end());
    ans = (g[0] + g[1]) * (1 - (p / 100));
    g[1] = ans;
    g.erase(g.begin());
    sort(g.begin(), g.end());
    ans = (g[0] + g[1]) * (1 - (p / 100));
    ans = (ans + g[2]) * (1 - (p / 100));
    otp << fixed << setprecision(2) << ans;
    return 0;
}
READ ALSO
Сумма цифр числа 100!

Сумма цифр числа 100!

Написал код для подсчета суммы цифр в числе 100! для решения задачи на Проекте ЭйлераДо этого успешно использовал кусок кода, который непосредственно...

132
Упорядочивание файлов в папке

Упорядочивание файлов в папке

Есть вот такая задачка:

138
тип float в бинарный вид C++

тип float в бинарный вид C++

Задача из универа: Для числа типа float при выводе на экран его битового представления указать знаковый бит, порядок и мантиссуЧисло вводят...

187
Не линкуется библиотека xblas

Не линкуется библиотека xblas

Собрал библиотеку по инструкции с сайта следующими командами:

144