示例:
输入: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]
以下是一些正确的示例:
答案 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,因此该索引应该没有任何变化。