需求通用算法:(要求顾客最大化原则)
商场搞活动送赠券:
购商品A,现金100送10券一张,200送30券一张,张数不封顶
购商品B,现金200送30券一张, 400送65券一张,张数不封顶
购商品C,现金200送20券一张,500送60券一张,张数不封顶
产生赠券通用
现顾客购买商品A 200元,商品B 450,商品C 1200,
支付方式:1000元赠卷,850元现金,问850现金应生成
各种券几张,券面金额相同算一种券
商场搞活动送赠券:
购商品A,现金100送10券一张,200送30券一张,张数不封顶
购商品B,现金200送30券一张, 400送65券一张,张数不封顶
购商品C,现金200送20券一张,500送60券一张,张数不封顶
产生赠券通用
现顾客购买商品A 200元,商品B 450,商品C 1200,
支付方式:1000元赠卷,850元现金,问850现金应生成
各种券几张,券面金额相同算一种券
private string ReturnTickets( int aPay, int bPay, int cPay, int money )
{
int remain = money;
int t10 = 0;//10元券张数
int t20 = 0;//20元券张数
int t30 = 0;//30元券张数
int t60 = 0;//60元券张数
int t65 = 0;//65元券张数
if ( bPay >= 900 && remain >= 900 )
{
while ( bPay >= 200 && remain >= 200 )
{
if ( remain >= 400 )
{
t65 += 1;
bPay -= 400;
remain -= 400;
}
else
{
t30 += 1;
bPay -= 200;
remain -= 200;
}
}
remain -= bPay;
}
while ( aPay >= 100 && remain >= 100 )
{
if ( remain >= 200 )
{
t30 += 1;
bPay -= 200;
remain -= 200;
}
else
{
t20 += 1;
bPay -= 100;
remain -= 100;
}
}
remain -= aPay;
while ( cPay >= 200 && remain > 200 )
{
if ( remain >= 500 )
{
t20 += 1;
bPay -= 500;
remain -= 500;
}
else
{
t60 += 1;
bPay -= 200;
remain -= 200;
}
}
string st = "10元券" + t10.ToString() + "张; ";
st += "20元券" + t20.ToString() + "张; ";
st += "30元券" + t30.ToString() + "张; ";
st += "60元券" + t60.ToString() + "张; ";
st += "65元券" + t65.ToString() + "张; ";
return st;
}