抽奖算法总结
2015-01-09 16:00
274 查看
两类,第一类是常见的有等级的抽奖活动,如一等、二等、三等奖等等,废话不多说,直接贴代码:
另一类是不分等级的抽奖活动,仅需要参与人数与奖品总数,各奖品中奖概率相等。代码如下:
// 分别为一、二、三、四等将的奖品数量,最后一个为未中奖的数量。 private static final Integer[] lotteryList = {5, 10, 20, 40, 100}; private int getSum() { int sum = 0; for (int v : lotteryList) { sum += v; } return sum; } private int getLotteryLevel() { Random random = new Random(System.nanoTime()); int sum = getSum(); for (int i = 0; i < lotteryList.length; ++i) { int randNum = Math.abs(random.nextInt()) % sum; if (randNum <= lotteryList[i]) { return i; } else { sum -= lotteryList[i]; } } return -1; }
另一类是不分等级的抽奖活动,仅需要参与人数与奖品总数,各奖品中奖概率相等。代码如下:
//另一种抽奖算法,用于公司抽奖,即总参与人数与奖品数固定。 private static final int lotteryNum = 75; private static final int total = 175; private static Set<Integer> lotterySet = new HashSet<Integer>(); static { for (int i=1; i <= lotteryNum; ++i) { lotterySet.add(total*i/lotteryNum); } } private int getLotteryNum2() { Random rand = new Random(System.nanoTime()); int randNum = Math.abs(rand.nextInt()) % total; if (lotterySet.contains(randNum)) { return randNum*lotteryNum/total; } return -1; }
相关文章推荐
- 随机获取礼物活动总结(抽奖算法)
- 4类抽奖算法总结
- 微信平台抽奖算法总结-再也不用怕奖品被提前抢光
- 微信平台抽奖算法总结-再也不用怕奖品被提前抢光
- 算法总结系列之三 : 计数排序(CountingSort)
- 二叉树 遍历 算法总结
- QuickSort分析,这是回复提问时碰到的,顺便对学过的算法进行复习,总结...
- 对Photoshop高斯模糊滤镜的算法总结
- 关于全文检索的归并的算法总结:
- 算法分析之分治法总结(二)
- 算法总结系列之六: 桶排序(Bucket Sort)
- 算法总结系列之一:堆排序(Heap Sort)
- 表达式计算算法总结
- [导入]算法总结系列之七:选择问题(Randomized Select)
- 算法总结系列之八:复读机的故事 - 散列表.NET应用的研究(下集)
- 算法总结系列之七:选择问题(Randomized Select)
- STL中的算法总结
- 基于.NET 的 加密 解密 算法总结[一]
- STL算法函数总结
- 算法总结系列之八:复读机的故事 - 散列表.NET应用的研究(下集)