$procur) { $randnum = mt_rand(1, $prosum); if ($randnum array('id'=>1,'prize'=>'平板电脑','v'=>1), '1' => array('id'=>2,'prize'=>'数码相机','v'=>5), '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10), '3' => array('id'=>4,'prize'=>'4g优盘','v'=>12), '4' => array('id'=>5,'prize'=>'10q币','v'=>22), '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50), ); /* * 每次前端页面的请求,php循环奖项设置数组, * 通过概率计算函数get_rand获取抽中的奖项id。 * 将中奖奖品保存在数组$res['yes']中, * 而剩下的未中奖的信息保存在$res['no']中, * 最后输出json个数数据给前端页面。 */foreach ($prize_arr as $key => $val) { $arr[$val['id']] = $val['v']; } $rid = get_rand($arr); //根据概率获取奖项id $res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项 unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项 shuffle($prize_arr); //打乱数组顺序 for($i=0;$i
做移动的项目,有个需求,做个摇奖的活动!其中中奖的计算比较恶心,用户要改动各个奖项的中奖概率,而且每天的奖项有个数限制。一二三四五六等奖,概率不通,怎么算一个用户参与了中没中将呢?苦思了一下,可以用random类的 nextint(int x)方法产生一个范围内的随机数,产生到那个区间就是几等奖了,中奖区间的产生是动态的。贴出源代码,仅供参考!
package mzone;import java.util.arraylist;import java.util.random;public class mzone { /** * copyrright(c)2009-04: * project: * module id: * comments: 概率计算 * jdk version used: * author:ch * create date:2009-04-20 * modified by: * modified date: * why & what is modified * version: 1.0 */ static random r = new random(); public static void main(string[] args) { //各个奖项的中奖概率的分母 integer _5m = new integer(5); integer _500m = new integer(30); integer _ipod = new integer(500); integer _phone = new integer(1000); integer _notebook = new integer(1500); integer _jay = new integer(50); arraylist list = new arraylist(); if(_5m.intvalue()!=0) list.add(_5m); if(_500m.intvalue()!=0) list.add(_500m); if(_ipod.intvalue()!=0) list.add(_ipod); if(_phone.intvalue()!=0) list.add(_phone); if(_notebook.intvalue()!=0) list.add(_notebook); if(_jay.intvalue()!=0) list.add(_jay); //计算最小公倍数 int common = getn(list); system.out.println(最小公倍数:+common); int a = 0;int b = 0;int c = 0;int d = 0;int e = 0;int f = 0;int g = 0; int first = 0;int second = 0;int third = 0;int four = 0;int fifth = 0;int sixth = 0; if(_5m.intvalue()!=0){ first = common/_5m.intvalue(); } if(_500m.intvalue()!=0){ second = first + (common/_500m.intvalue()); }else second = first; if(_ipod.intvalue()!=0){ third = second + (common/_ipod.intvalue()); }else third = second; if(_phone.intvalue()!=0){ four = third + (common/_phone.intvalue()); }else four = third; if(_notebook.intvalue()!=0){ fifth = four + (common/_notebook.intvalue()); }else fifth = four; if(_jay.intvalue()!=0){ sixth = fifth + (common/_jay.intvalue()); }else sixth = fifth; int times = 30000;//循环次数 for(int i = 0;i = 0 && ri = first && ri = second && ri = third && ri = four && ri = fifth && ri < sixth){ f++; }else{ g++; } } system.out.println(5m值: + a + 500m值: + b + ipodmp3: + c + 手机: + d + 笔记本电脑: + e + 演唱会门票: + f + 谢谢参与: + g); } /** * 求最大公约数 */ public static int gcd(int m, int n){ while (true){ if ((m = m % n) == 0) return n; if ((n = n % m) == 0) return m; } } /** * 求最小公倍数 */ public static int gys(int z, int y){ int t = 0; int c = 0; c = gcd(z,y); t = z * y / c; return t; } /** * 求几个数的最小公倍数 */ public static int getn(arraylist list){ int t = 1; for(int i = 0;i
http://www.bkjia.com/phpjc/1084593.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1084593.htmltecharticle基于php代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法, 大转盘中奖概率算法在我们的日常生活中,经常遇到,那么基于php代码是...