需求通用算法:(要求顾客最大化原则)
商场搞活动送赠券:
           购商品A,现金100送10券一张,200送30券一张,张数不封顶
           购商品B,现金200送30券一张, 400送65券一张,张数不封顶
           购商品C,现金200送20券一张,500送60券一张,张数不封顶
产生赠券通用
现顾客购买商品A 200元,商品B 450,商品C 1200,
支付方式:1000元赠卷,850元现金,问850现金应生成
各种券几张,券面金额相同算一种券

解决方案 »

  1.   

    //aPay A商品消费,bPay B商品消费,cPay C商品消费,money 支付的现金
    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;
            }