计算贷款数据的薪水字符串

时间:2018-11-13 01:08:33

标签: c++ string vector

示例:

输入: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个,然后算作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,1,2,2,2,2,2,2,2,2,2,2]

以下是一些正确的示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

您有一个条件,即如果付款太低,则会加重罚款,客户会落后一个月。

添加另一个条件:如果多付款,例如$ 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,因此该索引应该没有任何变化。