入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

JAVA抽奖的算概率法

创建时间:2015-07-09 投稿人: 浏览次数:4180

php:

data.php处理前端发送的ajax请求,我们才用概率算法,根据设置好的中奖概率,将中奖结果以json的格式输出。关于概率计算的例子可以参照:PHP+jQuery实现翻板抽奖

 
$prize_arr = array( 
    "0" => array("id"=>1,"prize"=>"平板电脑","v"=>3), 
    "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"=>"Q币10元","v"=>20), 
    "5" => array("id"=>6,"prize"=>"下次没准就能中哦","v"=>50), 
); 
 
foreach ($prize_arr as $key => $val) { 
    $arr[$val["id"]] = $val["v"]; 

 
$rid = getRand($arr); //根据概率获取奖项id 
$res["msg"] = ($rid==6)?0:1; //如果为0则没中 
$res["prize"] = $prize_arr[$rid-1]["prize"]; //中奖项 
echo json_encode($res); 
 
//计算概率 
function getRand($proArr) { 
    $result = ""; 
 
    //概率数组的总概率精度 
    $proSum = array_sum($proArr); 
 
    //概率数组循环 
    foreach ($proArr as $key => $proCur) { 
        $randNum = mt_rand(1, $proSum); 
        if ($randNum <= $proCur) { 
            $result = $key; 
            break; 
        } else { 
            $proSum -= $proCur; 
        } 
    } 
    unset ($proArr); 
 
    return $result; 


优先级规则使高等奖尽量在后期抽出

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 import java.util.LinkedList; import java.util.List;   public class GetGift {       // 奖品仓库     private List<Gift> gifts = new LinkedList<Gift>();       public GetGift() {         // 生成一堆奖品放进奖品仓库         // 一等奖一个优先级1,二等奖两个优先级2。。。20等奖20个优先级20         for (int i = 1; i <= 20; i++) {             GiftType gt = new GiftType(i + "等奖", i, i);             for (int j = 1; j <= i; j++) {                 gifts.add(new Gift(i + "等奖——第" + j + "号", gt));             }         }     }       // 抽奖     public synchronized Gift getGift() {         int randomNumber = (int) (Math.random() * total());         int priority = 0;         for (Gift g : gifts) {             priority += g.getType().getPriority();             if (priority >= randomNumber) {                 // 从奖品库移出奖品                 gifts.remove(g);                 return g;             }         }         // 抽奖次数多于奖品时,没有奖品         return null;     }       /**      * @param args      */     public static void 
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。