首页 > 解决方案 > 计算贷款数据的支付字符串

问题描述

例子:

输入: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]

解释:由于第一次付款是 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 笔付款,所以现在我们支付了到期的付款,但我们仍然没有支付上个月的其他两笔付款,所以我们仍然是 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, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

这里还有几个正确的例子:

在此处输入图像描述

标签: c++stringvector

解决方案


你有一个条件,如果付款太低,就会增加罚款,客户落后一个月。

添加另一个条件:如果多付了钱,例如 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

我的输出不一样,也许预期的输出不正确或者你遗漏了一些东西。请注意,第 6 次付款是 100,因此该指数不应该有任何变化。


推荐阅读