发货交付算法

时间:2010-08-24 17:18:17

标签: c# algorithm currency

我需要获得继承的DispenseAlgorithm类。它必须实现计算交货发放的算法。该算法必须提供均匀的名义消费。

public abstract class DispenseAlgorithm
{
       public abstract Dictionary<int, int> CalculateDispense(CassetteData[] data, int summ);
}

public class CassetteData
{
       public int UID { get; set; }
       public int Nominal { get; set; }
       public int Count { get; set; }

       public CassetteData() { }
}

类CassetteData - 提供有关当前时间面额集的信息(名义 - 名义面额值,计数 - 面额数量,UID - 面额集的唯一标识符)。

CalculateDispense方法有2个参数:   - 在当前时间可用面额集(CassetteData {]数据)   - 总和我们支付(或给予)现金返还。

方法CalculateDispense必须返回对象Dictionary,其中key - 面额集的唯一标识符,以及值 - 支付所需面额的数量。

意想不到的结果:在某些会议发布会上,面额必须尽可能均匀地结束

例如: 我们有面额集:

1        10 $                100 denomination
2        50 $                 100 denomination
3        100 $         100 denomination

我们需要支付800美元

结果很好:

1     5 items 
2     5 items 
3     5 items

因为800 = 10 * 5 + 50 * 5 + 100 * 5

结果不好:

1        0 items 
2        0 items 
3        8 items

因为800 = 10 * 0 + 50 * 0 + 100 * 8

面额是指金钱,票据,剪切,银行票据,债券

发货是指发行现金返还

标称 - 面值,面值,面值,面值,评级

1 个答案:

答案 0 :(得分:2)

如果我正确地理解了你的问题,你正在寻找一个对一组整数Y说的算法,我怎么能得到一个值x,使得x = a1 * y1 + a2 * y2 + a3 * y3 +。其中y1,y2,y3,...是Y和a1,a2,a3,...的元素是最小间隔的整数,或者更确切地说是“偶数”。

如果这是正确的,那么您需要定义如何根据a来衡量最佳结果。你提到你有一个固定的每个音符池,因此你想尽可能地保持这个级别,但你如何衡量“最佳”的最终结果呢?

作为一个起点,我建议查看this question及其回答,因为它们似乎是你所追求的事情,除非你需要保持面额水平的警告。

你也可以考虑研究线性规划,因为这似乎是一个可以用这种形式表达并相应解决的问题。在一系列限制条件下工作时最大化和最小化价值是它的全部意义,所以很可能会有所帮助。

希望这可以作为解决问题的有用起点