想用PHP做抽奖系统,思路..

做PHP确实很少接触算法问题
前几天遇到一个PHP几率算法问题,很有意思,
大致就是一个抽奖程序
贵重物品出现几率低,便宜物品出现几率高
网上找打了答案,在下面评论中看到了另一种方法,我觉得更好,效率更高

转来这个问题,和我之前遇到的差不多,
问题是这样子的:在一个物品合成系统中,需要使用几件不同的物品来合成宝石,有不同的几率生成一颗(50%)、两颗(16%)和三颗(2%)宝石,其余的为爆掉,即什么也得不到。

//初始化数组

$stone_arr = array( 
array( ‘num‘ => 1, ‘prob‘ => ‘50%‘ ),
array( ‘num‘ => 2, ‘prob‘ => ‘16%‘ ),
array( ‘num‘ => 3, ‘prob‘ => ‘2%‘ )
);

//随机获得一个幸运数字
$luck_num = mt_rand( 0, 99 );
//初始化几率区间和最终宝石生产数目
$lucky_range = $made_num = 0;

foreach( $stone_arr as $sa ){
$prob = intval( $sa[‘prob‘] );
if( $luck_num >= $lucky_range && $luck_num < $lucky_range + $prob ){
$made_num = $sa[‘num‘];
break;
}
else{
$lucky_range += $prob;
}
}

for( $i = 0; $i < $made_num; $i++ ){
//生产宝石的逻辑
}

然后是第二种方法,我喜欢的方法,不知道数量多了效率会不会也有问题

$a = array_fill(0,50, 1);
$b = array_fill(0,16, 2);
$c = array_fill(0,2, 3);
$d = array_fill(0,32, 0);
$arr = array_merge($a, $b, $c);
//var_dump($arr);
$d = mt_rand(0,99);
echo $arr[$d];

http://www.yl1001.com/yw.htm?doaction=question_detail&question_id=7221371520123639

时间: 2024-11-04 15:02:28

想用PHP做抽奖系统,思路..的相关文章

福大软工1816 &#183; 团队现场编程实战(抽奖系统)

福大软工1816 · 团队现场编程实战(抽奖系统) 队员职责分工 团队成员 分工 张扬 预处理算法.抽奖算法.解决其他问题.本次博客撰写 韫月 "创建抽奖活动"页面的开发."已发布""已结束"等页面的动态生成 愈明 "创建抽奖活动"页面的开发.弹窗交互 文婧 "已发布"."已结束"页面的开发 地秀 "已发布"."已结束"页面的开发 全炯 各个页面的

团队现场编程实战(抽奖系统)

目录 组员职责分工 github 的提交日志截图(鼓励小粒度提交) 程序运行截图 程序运行环境 GUI界面 基础功能实现 LCG算法 过滤(降权)算法 算法思路 红黑树 附加功能实现(20分) 鼓励有想法且有用的功能(10分) 遇到的困难及解决方法 组员:胡绪佩 组员:庄卉 组员:政演 组员:刘一好 组员 翟丹丹 组员:刘恺琳 组员:青元 组员:葛家灿 组员:何家伟 组员:黄鸿杰 组员:何宇恒 马后炮 组员:胡绪佩 组员:何家伟 组员:翟丹丹 组员:刘一好 组员:刘恺琳 组员:青元 组员:庄卉

PPT图片双屏抽奖系统现场主要操作流程介绍

具体步骤: 一.把第二个步骤优化处理制作好的PPT文件 图片.ppt ,复制到抽奖系统中的PPT文件夹下,覆盖同名文件. 启动"PPT图片双屏抽奖系统.exe"文件: 准备1-必做: 点击系统主界面[1-设置]按钮,打开设置对话框,如下图: [奖励档次有效数值设置]是指从A依次至I,经历多了个奖项.数值范围为1-9. 比如:A->B->C->D-E, [奖励档次有效数值设置]为5. [滚动时左上角显示提示信息]选项是指当用户点击[开始滚动抽取] 按钮时,滚动画面左上方

jquery实现抽奖系统

闲来无事做了一个抽奖的系统: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>抽奖系统</title> <script src="source/jquery.js"></script> <style> #box{ width:450px; margi

简易抽奖系统的实现,键盘控制

一个简易的抽奖系统! JS原理:建立一个数组用来存储抽奖内容,例如 iphone6 等,当点击开始的时候,开启定时器,产生一个随机数,把对应文本的innerHTML改成数组所对应的内容. 如果想让某个抽奖几率变高,可以让数组中某个值重复次数多点.接下来看代码.. JavaScript代码 1 window.onload = function(){ 2 var data = [ 3 "iphone 6s plus", 4 "苹果Mac 笔记本", 5 "美的

小型抽奖系统的一个总结

package com.Test; import java.util.Arrays; import java.util.Scanner; public class Test2 { /** 主要功能 注册 登录 幸运抽奖 需求说明 输出菜单 选择菜单编号,输出菜单信息 如果编号选择错误,输出“您的输入有误!” 需求说明 系统询问用户是否继续 如果用户选择继续,则可以继续选择菜单,否则程序结束,退出系统 需求说明 输入用户名和密码,系统产生4位随机数作为卡号. 注册成功,显示注册信息并修改注册标识为

代做远程系统系统、代写远程终端管理系统

代做远程系统系统.代写远程终端管理系统远程终端管理系统需求分析说明书一. 引言 11.编写目的 12. 定义 1二. 任务概述 21.目标 22. 用户的特点 23. 系统功能示例 2三. 需求细则 21. 对功能的规定 22. 对性能的规定 53. 对排版的规定 54. 对可维护性的规定 55. 对个性的规定 66. 对项目过程的规定 6 一. 引言1.编写目的通过与多位软件使用者进行全面深入地探讨和分析,并完成<远程终端管理系统>市场的前期调查后,提出了这份软件需求分析说明书.此需求分析说

【小型系统】抽奖系统

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda

【小型系统】抽奖系统-使用Java Swing完成

一.需求分析 1. 显示候选人照片和姓名. 2. 可以使用多种模式进行抽奖,包括一人单独抽奖.两人同时抽奖.三人同时抽奖. 3. 一个人可以在不同的批次的抽奖中获取一.二.三等奖,但是不能在同一批次抽奖中获取多个奖项. 二.系统总体框架 系统需求比较简单,采用Java Swing技术可以很好的实现,系统的总体类框架图如下 说明:基于主要的三个类就可以完成所需要的功能,Frame有Panel类型与MouseAdapter类型的成员,Panel主要用户存放具体的控件和绘制相应的信息,MouseAda