概率计算(抽奖活动、命中率)

最近在做移动端的营销活动,其中包含刮刮卡、大转盘等小游戏,对于用户来说他们不关心Code只关心我是否中奖了,之前也在群里看到有人要概率的“算法”或者说是计算工具类。

ps:这里不得不提一下,每当自己在做什么东西的时候总会在一些地方发现相似的需求或者文章,来源有很多比如:cnblogs、QQ群等各种渠道,这不刚刚还有人发表随机数相关的文章,哈哈可能是我运气好。

营销活动核心——我是不是中奖了呢?

是不是中奖都有一个概率和巧合性那么肯定少不了随机数了,说到随机数各位Coder们肯定想到了Random这个类,是的这一次的概率计算的实现也是基于随机数的。

下面我们来看概率服务接口:

IProbabilityService

接口十分的简单一起有两个方法,第一个方法比较纯粹的计算概率,而第二个则添加了一些修正概率所需的数据。

 

为什么需要“getRandomNumber”参数,而不直接在内部使用Random?

这边就需要引入“随机数是骗人的,.Net、Java、C为我作证”今天的热乎文章了,内部使用Random有很多的不确定性,而且不易于扩展所以这边提供了一个委托提供随机数,而概率服务本身只专注于计算,如果非要高大上点就引入设计原则——单一职责

服务实现

ProbabilityService

代码有较详尽的注释这边不再说明了。

 

有运行Demo吗?

当然,这是我的一贯作风热烈的笑脸

运行结果

image

第一行为接口的第一个方法(纯粹的概率计算),第二个行为接口的第二个方法(带简单修正)。

Code

Program

Demo下载:http://pan.baidu.com/s/1gdmnH31

 

写在最后

已经写了一些“散文”做为锻炼,之后准备写一个系列挑战一下,不过最近在做项目,等手上的模块做完之后,开始着手针对 Orchard Framework 写一个刨析系列,当然中间可能会穿插一些小文章,喜欢Orchard的朋友们可以留个言留个脚印。

posted @ 2014-05-12 21:22  KAnts  阅读(15791)  评论(7编辑  收藏  举报