概率抽奖

[TestMethod]

public void CheckTrue()

{

var reg = CommonTools.CheckTrue(1.001M);

}

/// <summary>

/// 根据中奖率判断是否中奖

/// </summary>

/// <param name="percent">中奖率(0~100)</param>

/// <returns></returns>

public static bool CheckTrue(decimal percent)

{

bool result = false;

if (percent >= 100)

{

result = true;

}

else if (percent <= 0)

{

result = false;

}

else

{

string strPercent = percent.ToString();

int rndCount = 0;//随机数个数

int rndMax = 0;//随机数最大值

int rand = 0;//抽中数

if (strPercent.IndexOf(‘.‘) == -1)//无小数位

{

rndMax = 100;

rndCount = (int)percent;

var rndList = GenerateRandom(rndMax, rndCount,false);

rand = rnd.Next(rndMax);

result = rndList.Contains(rand);

}

else

{

int accCount = strPercent.Length - strPercent.IndexOf(‘.‘)-1;

//rndMax= percent>=1? (int)Math.Pow(10, strPercent.Length+1): (int)Math.Pow(10, accCount+1);

rndMax = (int)Math.Pow(10, accCount + 2);

rndCount = (int)(percent * (int)Math.Pow(10, accCount));

var rndList = GenerateRandom(rndMax, rndCount, false);

rand = rnd.Next(rndMax);

result = rndList.Contains(rand);

}

}

return result;

}

public static List<int> GenerateRandom(int iMax, int iNum,bool isRepeat=true)

{

long lTick = DateTime.Now.Ticks;

List<int> lstRet = new List<int>();

for (int i = 0; i < iNum; i++)

{

Random ran = new Random((int)lTick * i);

int iTmp = ran.Next(iMax);

if (!isRepeat)

{

if (lstRet.Contains(iTmp))

{

i--;

lTick += (new Random((int)lTick).Next(978));

continue;

}

}

lstRet.Add(iTmp);

lTick += (new Random((int)lTick).Next(978));

}

return lstRet;

}

时间: 2024-09-29 18:12:59

概率抽奖的相关文章

多件商品根据概率抽奖

最近在项目中分配了一个抽奖模块的任务,这里先说一下需求把:每个抽奖活动后台会配置多个中奖奖品,分为特殊奖品和普通奖品,所有奖品的中奖概率之和加起来为1.用户端用户抽奖需要根据概率来随机抽中一个商品.开始我脑子生出来的第一想法是生成一个随机数,然后让这个随机数跟概率去比较,取小于这个随机数的最大一个概率对应的商品为中奖商品,后来一想,发现自己想的太简单直观了,这样抽中的商品中奖概率不满足配置的中奖概率.在网上搜了一下相关的问题,然后就弄清楚了.说来惭愧,这么一个简单的算法题,自己竟然第一时间没有没

前端+php实现概率抽奖

转前端之后,后台工程师大大跑路了只能兼任他的位置写点东西了 前端+后台抽奖代码网上一大堆,引用一位仁兄前面的代码(比较懒抱歉,后面数据处理,奖项判断是否抽完我将会标红,因为前面的代码网上太多了都能找到) 引用部分-start---------------------> 准备工作 首先要准备素材,抽奖的界面用到两张图片,圆盘图片和指针图片,实际应用中可以根据不同的需求制作不同的圆盘图片. 接着制作html页面,实例中我们在body中加入如下代码: <div class="demo&qu

不同概率的抽奖

今天为大家写个小程序. 工作中有遇到一些抽奖的活动,但是你懂得,抽奖物品的概率肯定不是一样,你会发现好的东西很难抽到,经常抽到一些垃圾的东西,嘿嘿,这就是本文要说的,我们要控制抽奖物品的概率.还有顺便说一句,网上这种小程序几乎没有,很多都是等概率的抽奖balabala- 需求很简单,为了更加形象,这里我们列一个表格来显示我们抽奖的物品和对应的概率(没有边框,大家凑合着看看吧,不想改造Octopress的样式了) 序号 物品名称 物品ID 抽奖概率 1 物品1 P1 0.2 2 物品2 P2 0.

javascript抽奖插件+概率计算

写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~. 概率计算 function Probability(conf) { this.probArr = conf || []; this.range = [], this.len = this.probArr.length; if (this.len > 0) { this.init(); } } Probability.prototype = { init: f

php抽奖程序

//php概率抽奖算法 1.获取总的概率数 2.随机从1到总概率数 3.判断获取的随机数是否在小于等于(就是你随机的数是否在数组值得范围中比如数组为array(1,2,3,4,5,6)则随机出了一个数为3 3是存在array中 所以将键就赋给一个变量 ,如果随机一个数为 7了 那得减去这个范围 一直到能在数组中寻找到 $sum=$sum-$val 像这样(随机数为7 则7-1=6))数组中的值 function get_rand($arr) { $result=""; $sum=arr

PHP新写的大转盘抽奖源码

中奖概率 抽奖大转盘演示:http://www.sucaihuo.com/php/3301.html function getRand($proArr, $proCount) { $result = ''; $proSum = 0; foreach ($proCount as $key => $val) { if ($val <= 0) { continue; } else { $proSum = $proSum + $proArr[$key]; } } foreach ($proArr as

重要信息记录

酷勤网 – 程序员的那点事! 酷勤网 设为首页 加入收藏 订阅本站 首页 编程 产品 职业 管理 资讯 考试 游戏 读书 主题 下载 书籍百科 书籍书评 当前位置:首页 > 职业 > 求职招聘 > 正文 阿里.百度.搜狐等公司社招面试记录与总结 浏览次数:448次 博客园 2016年05月09日 字号: 大 中 小 分享到:QQ空间新浪微博腾讯微博人人网豆瓣网开心网更多0 这个跳槽季大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面经, 我现在主要的方向是Jav

C# 做一个指定概率的抽奖程序

static void Main(string[] args) { //各物品的概率保存在数组里 float[] area = new float[4]{ 0.980f, 0.550f, 0.230f, 0.010f }; //单次测试 //Console.WriteLine(Get(area)); //批量测试 int[] result = new int[4]{ 0, 0, 0, 0 }; for (int i = 0; i < 1770000; i++) //为了比对结果方便,这里循环的次

相同概率的抽奖程序另类实现——使用数据库,无需数学原理

抽奖,是很多企业.聚会的常见玩乐形式,光彩绚丽的抽奖屏幕背后,是计算程序+抽奖用户信息.程序=算法+数据结构. 好,说抽奖程序的的实现吧.这个实现一般需要应用数学原理.而本文的方法是我在参加一次婚礼的抽奖体验后突然想到的,一种比较简单.无需数学原理的方法. 功能:能按照相同概率,从用户集合中抽出随机的部分用户集合作为中奖者.抽奖可以进行多次,对已中奖的用户不会重复抽取. 使用技术: 1.SqlServer数据库,使用NewID()作为select随机筛选函数 2.sql随机函数 3.为了快速方便