如何使用数组选择一个数字范围,然后选择所需的输出?
例如,如果我想创建一个程序,根据他们有多少物品给予一个人折扣。如果他们购买0-5件商品,他们不会得到折扣。如果他们购买5-10件商品,他们可以享受5%的折扣,如果他们得到10-20件商品,可以享受10%的折扣等等。我如何使用数组来排序而不是许多“If”语句?如何使用数组选择一个数字范围,然后选择所需的输出?
可以保持数组来表示你已经给定的范围。我说的是存储像.... 说数组名称是数组然后数组[0] = 5即第一个区间的最大值。然后数组[1] =第二个间隔的最大值10,并以相同的方式继续。因为您刚刚维护的这个数组只包含少量值,所以线性搜索没有性能问题。 现在,如果numberOfOrderedItems小于value_of_array,则可以打破循环并决定要给予的折扣。
如果您保持大量的折扣间隔,那么去二进制搜索而不是线性搜索。
这是一个通用算法...我没有使用C#,所以我不能用C#解释# – 2013-04-04 08:10:07
你可以用伪代码来实现吗? – Sabotenderizer 2013-04-04 08:32:34
如何用结构入手来存储界和折扣:
public struct DiscountSpec
{
public int MinItems{get;set;}
public int MaxItems{get;set;}
public double Discount{get;set;}
}
把它放在一个阵列
DiscountSpec[] discounts = new DiscountSpec[]
{
new DiscountSpec(){MinItems=0,MaxItems=5,Discount=0},
new DiscountSpec(){MinItems=5,MaxItems=10,Discount=0.05},
new DiscountSpec(){MinItems=10,MaxItems=20,Discount=0.10},
}
再神奇
int numItemsPurchased=7;
var discount = discounts.Where(
d => d.MinItems<numItemsPurchased && d.MaxItems>=numItemsPurchased)
.Select(d => d.Discount)
.FirstOrDefault();
现在,discount
将包含0
(无折扣)或0.05
(5%折扣)或0.1
(10%折扣)。如果需要,可以使用其他折扣括号进行扩展。
小问题:您发布的代码会将5件物品放入“无折扣”的插槽中,并且OP会在“5%折扣”插槽中加入它。也许你应该改变你的范围,从半开放的时间间隔到封闭的(即包含的)时间间隔。 – 2013-04-04 08:34:11
@MthetheWWatson - 不错的位置,但是如果5以0-5或者5-10进入,则OP不清楚。 – Jamiec 2013-04-04 08:55:49
你试过一些东西..或者外包...... – Shashi 2013-04-04 07:57:18
和20-30项,你期望放弃什么? – Tigran 2013-04-04 08:00:36