JAVA抽奖的算概率法
来源:互联网 发布:阿里巴巴上架软件 编辑:程序博客网 时间:2024/05/18 03:45
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
main(String[] args) {
GetGift gg =
new
GetGift();
// 一共生成210个奖品,抽210次,多抽显示null
for
(
int
i =
0
; i <
210
; i++) {
System.out.println(gg.getGift());
}
}
// 计算总优先级,内部使用
private
int
total() {
int
result =
0
;
for
(Gift g : gifts) {
result += g.getType().getPriority();
}
return
result;
}
}
// 记录奖品的信息
// 如1等奖共1个,优先级为1最难抽
class
GiftType {
// 名字(如1等奖)
private
String name;
// 这种奖品的数量,数量越大越容易抽到
private
int
quantity;
// 这种奖品的优先级,最小为1,数越大越容易抽到
private
int
priority;
public
GiftType(String name,
int
quantity,
int
priority) {
this
.name = name;
this
.quantity = quantity;
this
.priority = priority;
}
public
int
getPriority() {
return
priority;
}
@Override
public
String toString() {
return
"GiftType [name="
+ name +
", quantity="
+ quantity +
", priority="
+ priority +
"]"
;
}
}
// 奖品
class
Gift {
// 每个奖品有唯一id,抽奖不会重复,格式为"16等奖——第8号"
private
String id;
// 这个奖品的类别
private
GiftType type;
public
Gift(String id, GiftType type) {
this
.id = id;
this
.type = type;
}
public
GiftType getType() {
return
type;
}
@Override
public
String toString() {
return
"Gift [id="
+ id +
", type="
+ type +
"]"
;
}
}
0 0
- JAVA抽奖的算概率法
- java抽奖概率
- 抽奖的概率算法。
- 不同概率的抽奖
- php计算抽奖的概率
- php计算抽奖的概率
- 概率抽奖
- 概率抽奖
- 抽奖概率
- 概率---抽奖
- java实现一个抽奖概率类
- java实现一个抽奖概率类
- Java 实现根据权重设置抽奖概率
- JAVA使用随机数进行概率抽奖
- PHP控制中奖概率的抽奖算法
- php简单的抽奖概率算法
- 有关抽奖的概率计算问题
- C#&PHP&Java实现Alias Method概率抽奖算法
- Unsupported major.minor version 51.0 错误处理
- 异步传输图片到后台处理
- Xcode修改工程名字
- dfdafadsfefgvdfgbt
- uva12003 - Array Transformer 分块结构
- JAVA抽奖的算概率法
- Java执行操作系统命令
- iOS学习之iOS沙盒(sandbox)机制和文件操作(一)
- RS232芯片好坏判断
- NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
- Testin发布Pre.im打造中国版TestFlight
- Java可变类与不可变类
- GRE写作必备句型
- java观察者模式