我需要获得继承的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
面额是指金钱,票据,剪切,银行票据,债券
发货是指发行现金返还
标称 - 面值,面值,面值,面值,评级
答案 0 :(得分:2)
如果我正确地理解了你的问题,你正在寻找一个对一组整数Y说的算法,我怎么能得到一个值x,使得x = a1 * y1 + a2 * y2 + a3 * y3 +。其中y1,y2,y3,...是Y和a1,a2,a3,...的元素是最小间隔的整数,或者更确切地说是“偶数”。
如果这是正确的,那么您需要定义如何根据a来衡量最佳结果。你提到你有一个固定的每个音符池,因此你想尽可能地保持这个级别,但你如何衡量“最佳”的最终结果呢?
作为一个起点,我建议查看this question及其回答,因为它们似乎是你所追求的事情,除非你需要保持面额水平的警告。
你也可以考虑研究线性规划,因为这似乎是一个可以用这种形式表达并相应解决的问题。在一系列限制条件下工作时最大化和最小化价值是它的全部意义,所以很可能会有所帮助。
希望这可以作为解决问题的有用起点