【发布时间】:2018-03-12 07:33:22
【问题描述】:
我的报价配置了折扣值和适用的数量范围。
它可能适用于一个产品的多个优惠,因此我正在寻找算法来整合各种优惠之间的重叠数量范围并显示适用的最终折扣。下面的代码 sn-p 将有助于可视化询问:
class VolumeTierRange
{
public int Min { get; set; }
public int Max { get; set; }
public int Discount { get; set; }
}
/* Offer1Range */
List<VolumeTierRange> Offer1Ranges = new List<VolumeTierRange>{
new VolumeTierRange {Min=1, Max=20, Discount=2 },
new VolumeTierRange {Min=21, Max=49 , Discount=10 },
new VolumeTierRange {Min=50, Max=100 , Discount=5 },
new VolumeTierRange {Min=101, Max=1000, Discount=15}
};
/* Offer2Range */
List<VolumeTierRange> dicountBRanges = new List<VolumeTierRange>{
new VolumeTierRange {Min = 1, Max=50, Discount=6},
new VolumeTierRange {Min=51, Max=1000, Discount=10 }
};
综合结果如下:
List<VolumeTierRange> effectiveDiscount = new List<VolumeTierRange>{
new VolumeTierRange {Min=1, Max=20, Discount=8 },
new VolumeTierRange {Min=21, Max=49, Discount=16},
new VolumeTierRange {Min=50, Max=50, Discount=11},
new VolumeTierRange {Min=51, Max=100, Discount=15},
new VolumeTierRange {Min=101,Max=1000,Discount=25}
};
我确实有一些方法可以达到预期的结果,但这些方法似乎都不是很直观。
附加信息:第一项的最小值和所有报价的最大值是固定的(如本例中的 1 和 1000)。定义音量范围时也不能有不连续性。
【问题讨论】:
-
“我确实有一些方法可以达到预期的结果”您应该展示您尝试过的内容,以避免任何人使用您已有的相同解决方案。
-
因此您需要将整数范围相交并添加几个折扣。是什么阻止了你?
-
为什么最后一个合并行中的折扣是 15 而不是 25?
-
是的。有可能
-
@Evk:已更正。