Расчет зарплаты для данных о кредите - PullRequest
0 голосов
/ 13 ноября 2018

Пример:

Ввод: cpi = 100,0, платежи = [100,0, 94,0, 90,0, 100,0, 200,0, 100,0, 100,0, 100,0, 100,0, 100,0, 100,0, 100,0]

Вывод: paystring = [0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

Объяснение: Поскольку первый платеж был 100,0 иэто больше или равно cpi - 5.0 (95.0), тогда первый элемент в выходных данных равен 0. Тогда следующий элемент равен 1, поскольку 94.0 меньше, чем cpi - 5.0 (95.0), т.е. пропустил платеж, так как следующий элемент90,0 меньше, чем cpi - 5,0 (95,0), т. Е. Пропустили другой платеж, чем сейчас, когда у нас 2 (или 2 пропущенных платежа).Тогда в следующем элементе у нас было 100, что считается как 1 платеж, так что теперь мы выполнили тот платеж, который должен был быть выполнен, но мы все еще не покрыли другие два платежа за предыдущий месяц, поэтому мы все еще на 2. Затем процесс продолжается.

Пока у меня есть это:

double cpi = 100.0;
std::vector<double> payments = { 100.0, 94.0, 90.0, 100.0, 200.0, 300.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0 };
std::vector<int> paystring(payments.size(), 0);

int count = 0;
for (int i = 0; i < payments.size(); ++i) { 
    if (payments[i] <= cpi - 5.0) {
        paystring[i] = ++count;
    }

    else {
        paystring[i] = count;
    }
}

for (auto it : paystring)
    std::cout << it << " ";

Хотя это не правильно, так как не удается обновить счетчик, когда я сделал, скажем, полный платеж или больше, чем причитающаяся сумма (CPI)).Я просто хочу знать, что мне нужно изменить в моей логике, чтобы сделать эту работу.Дайте мне знать, если приведенный пример неясен.

Например, скажем, у меня есть

Ввод: cpi = 100.0, платежи = [100.0, 94.0, 90.0, 100.0, 200.0, 100.0, 300.0, 100.0, 100.0, 100.0, 100.0, 100.0]

Вывод: [0, 1, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0]

Но я получаю

[0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

Вот еще несколько правильных примеров:

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

У вас есть условие, что, если платеж слишком низкий, добавляется штраф, клиент отстает на один месяц.

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

std::vector<double> payments =  {
    100,  94, 90, 100, 200, 100, 300, 100, 100, 100, 100, 100
    //"0   1   1    0   -1    0   -2    0    0    0    0    0 <-penalty
    //"0   1   2    2    1    1    0    0    0    0    0    0 <-penalty sum
};

double cpi = 100.0;
for(int i = 0; i < payments.size(); ++i)
{
    double payment = payments[i];
    if(payment <= (cpi - 5.0))
    {
        //one month behind on payment
        count++;
    }

    while((payment > cpi) && count)
    {
        //customer made large payment. 
        //allow count to decrease. 
        //but count cannot be less than zero
        count--;
        payment -= cpi;
    }

    paystring[i] = count;
}

Выход для 100, 94, 90, 100, 200, 100, 100, 100, 100, 100, 100, 100:

0 1 2 2 2 2 2 2 2 2 2 2 //expected output
0 1 2 2 1 1 1 1 1 1 1 1 //result

Выход для 100, 94, 90, 100, 200, 100, 300, 100, 100, 100, 100, 100:

0 1 2 2 1 0 0 0 0 0 0 0 //expected output
0 1 2 2 1 1 0 0 0 0 0 0 //result

Мой вывод не совпадает, возможно, ожидаемый вывод неверный или вы что-то пропустили.Обратите внимание, что шестой платеж равен 100, поэтому никаких изменений в этом индексе не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...