一般的抽奖程序是怎么写的?

2021-11-09 22:37:55 +08:00
 kikione

如题。

4730 次点击
所在节点    程序员
51 条回复
coolmenu
2021-11-10 15:19:41 +08:00
把老板指定的人放置好,放点甲乙丙丁假人,最后把自己的控制的代理人也放进去,行啦
jinzhongyuan
2021-11-10 15:24:05 +08:00
public static void main(String[] args) {
WeightRandom<String> weightRandom = WeightRandom.create();
weightRandom.add("奖品 1", 0.8);
weightRandom.add("奖品 2", 0.2);
weightRandom.add("谢谢参与", 0);

// 统计 (这里用 AtomicInteger 仅仅是因为写起来比较方便,这是一个单线程测试)
Map<String, AtomicInteger> statistics2 = new HashMap<>();

for (int i = 0; i < 1_0; i++) {
String award = weightRandom.next();
System.out.println(award);
statistics2.computeIfAbsent(award, (k) -> new AtomicInteger()).incrementAndGet();
}
statistics2.forEach(
(k, v) -> {
double hit = (double) v.get() / 1_0;
System.out.println(k + ", hit:" + hit);
});
}


<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool}</version>
</dependency>



实现概率抽奖,请叫我雷锋
vitozyf
2021-11-10 16:13:06 +08:00
ylsc633
2021-11-10 16:46:40 +08:00
以前写过一个

有个后台,由运营配置 奖品和库存, 然后根据库存来计算中奖概率

所以 一等奖的 iPhone 的库存是 0,所以这个就不会抽中,但是会在抽奖列表里

概率是这么算的(是想公平点......)

就是随机值

比如 所有奖项库存是 100
一等奖是 iPhone,库存 0, 所以 概率就是 0
二等奖库存 10 个, 概率就是 10%
三等奖库存 40 个,概率就是 40%
四等奖库存 50 个,概率就是 50%

那么第一个人抽, 随机值是从 (0,100]
如果随机值是 (0,10] 就是二等奖
如果随机值是[11,50] 就是三等奖
如果随机值是[51,100]就是四等奖

第一个人抽中后,库存减一,比如 是抽中二等奖

那么 接下来的人
二等奖范围[0,9]
三等奖[10,49]
四等奖[50,99]

这样每个奖品都有库存.. 还可以随时加库存..

另外,如果有 谢谢惠顾 也是按照一种奖品来设置的. 不过他的奖品 ID 是特定的, 因为它的库存是无限的, 数据库里是有限的,如果不够了,代码会自动补货....

然后就是 缓存和数据库的事情了

以前的伪代码: http://interview.wzcu.com/%E8%AE%BE%E8%AE%A1%E9%A2%98/%E5%B8%A6%E6%9C%89%E6%9D%83%E9%87%8D%E7%9A%84%E9%9A%8F%E6%9C%BA%E7%AE%97%E6%B3%95.html#%E4%BB%A3%E7%A0%81

主要以前量小, 基本问题不大...
a62527776a
2021-11-10 16:55:32 +08:00
if (试用期) return
if (3 年一下) return 阳光普照
fl2d
2021-11-10 16:59:15 +08:00
众所周知,对于新浪微博来说,任何抽奖都要加一条 user.gender != "M" 。
wolfie
2021-11-10 17:00:10 +08:00
Random
中 2 等奖,库存 -1 ,没了 算中 3 等奖,往下推。
dbpe
2021-11-10 17:16:40 +08:00
类似卡池...
tzigone
2021-11-10 17:35:23 +08:00
核心就是随机函数,要有人还要继续深究真随机还是假随机,直接让他出随机方案. GG
3dwelcome
2021-11-10 23:39:33 +08:00
“要有人还要继续深究真随机还是假随机”

这种只能是假随机,就好比游戏氪金一样。在程序员真随机数大数据看来,没问题。可是由于人性的干预,很多人就觉得十连抽,一个 SSS 都不中,就觉得很离谱。又或者 20 连抽后,连续两个 SS 挤在一起。

假随机给用户的感觉更好。其实随机数还是那些,就是加入了十年抽必中,在给用户结果前,已经后台预先排序过了。
Alchemistboy
2021-11-11 16:16:44 +08:00
概率可配置,例如根据标签配置概率,如 [优质] 标签中奖概率调高, [新注册] 用户概率调极低之类的,反正就是要提供运营一套她们想让谁中就让谁中的配置化系统。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/814273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX