假如一个抽奖如下信息

int w_list[5] = { 20, 10, 40, 15, 15 };

string names[5] = { "电饭锅", "牙刷", "挨粪叉", "pier子", "蒸馍" };

对应权值 电饭锅–>20,牙刷–>10 以此类推,可见抽到挨粪叉的概率即权值最大

用C++ 实现

先或得随机数

1. 初始化随机数发生器

用法: void srand(unsigned int seed)

所在头文件: stdlib.h

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

获得0–权重和 之内的随机数

int w_sum = 0;

int length = sizeof(w_list) / sizeof(int);

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

{

w_sum += w_list[i];

}

/*for (int i = 0; i < length; i++) { cout << "rand()-" << i << "-" << rand() % w_sum << endl; }*/

int randVal = rand() % w_sum;

奖励

int rward代表奖励的下标

int rward = 0;

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

{

if (randVal <= w_list[i])

{

rward = i;

break;

}

randVal -= w_list[i];

//printf("randVal = %d rward = %d \n", randVal, rward);

}

//printf("length = %d w_sum = %d randVal = %d rward = %d \n", length, w_sum, randVal, rward);

printf("恭喜获得一个%s", names[rward].c_str());

解释

首先设置各个奖励的权重,这里的权重之和不必非要是100,我的这段代码设置的权重之和位100,是为了方便读者了解到各个奖励抽中的概率,所以这样设置的,理论上说,数值大一点,产生的随机数更大,也更加随机。这里只将权重放大数组中,一般情况下,需要策划提供相关的配表,然后从配表中读取数值,这样,在应用中,可以通过跟新配表,来事实更新权重信息。由于通过配表设置了权重,所以,奖励种类不确定,因此,通过sizeof函数,获取数所占空间,然后,除以int所占内存空间,获得数组长度。然后,求权重总和,再调用自己创建的随机函数,产生随机数。下面就是判断这个随机数在那种奖励的权重范围了。将获取的随机送randVal和权重数组中的数进行比较,首先和a[0]作比较,加入获取的随机数是41,a[0]=5,41>a[0],那么,将41 – 5 等于36,继续和第二个数a[1]也就是10进行比较,36比10大,就减去10,变成26,然后继续和a[2]也就是15比较,还是大,就减去15变为16,然后和a[3] 也就是25比较,这时,比25小,也就是说,此时随机到了这个奖励

完整代码

#include

#include

using namespace std;

int main()

{

srand((unsigned)time(NULL));

int w_list[5] = { 20, 10, 40, 15, 15 };

string names[5] = { "电饭锅", "牙刷", "挨粪叉", "pier子", "蒸馍" };

int w_sum = 0;

int length = sizeof(w_list) / sizeof(int);

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

{

w_sum += w_list[i];

}

int randVal = rand() % w_sum;

int rward = 0;

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

{

if (randVal <= w_list[i])

{

rward = i;

break;

}

randVal -= w_list[i];

}

printf("恭喜获得一个%s", names[rward].c_str());

getchar();

return 0;

}

mysql 根据权重抽取随机数_根据权重产生随机数相关推荐

  1. 熵值法计算权重有异常值_指标权重确定方法 1-熵值法

    在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...

  2. java生成不重复随机数_生成不重复随机数 java

    生成不重复随机数 java java生成随机数可以使用Math类中的方法.不随机可以使用List进行判断存储.(推荐教程:java教程 ) 1 . 调用java.lang下面Math类中的random ...

  3. java 生成随机数_不会生成随机数?我们来看看java生成随机数的10种方法

    1.引言 本文将探讨用 Java 生成随机数的不同方法. 2.Java API Java API 提供了几种随机数生成方法.让我们一起来了解一下. 2.1.java.lang.Math Math 类中 ...

  4. java生成指数分布随机数_生成特定分布随机数的方法

    生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...

  5. mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式

    摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...

  6. 二进制空间权重矩阵_空间权重矩阵(SWM)

    基本原理 如何利用数学(如用面积.距离等)建立空间数据和非空间数据之间的关系?对于空间统计而言,空间权重矩阵是一种有效的表达空间关系的方式.因此,它是用量化的方法表示了数据之间的"空间结构& ...

  7. 神经网络权重是什么意思,神经网络权重调整方法

    神经网络权值怎么确定? 神经网络的权值是通过对网络的训练得到的.如果使用MATLAB的话不要自己设定,newff之后会自动赋值.也可以手动:{}= ; {}=.一般来说输入归一化,那么w和b取0-1的 ...

  8. MYSQL的随机抽取实现方法

    MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. ...

  9. 从云数据迁移服务看MySQL大表抽取模式

    摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...

最新文章

  1. Nmap (网络映射器)好东西啊
  2. phrases practice_七年级短语、固定搭配练习题Phrases practice for Grade seven
  3. python中%符号详解
  4. strncmp用法说明
  5. const 和readonly
  6. python查找文件是否存在_python脚本查找文件是否存在的方法
  7. 2017.3.25 矩阵快速幂 求斐波那契数列第n项
  8. 组装我的计算机社会实践活动,暑期电脑销售社会实践心得体会
  9. 三星Note10 Pro电池曝光:容量高达4500mAh
  10. mysql按时间月份查询数据
  11. 关于卸载vmwave虚拟机后键盘不能输入的问题
  12. linux内核奇遇记之md源代码解读之一
  13. charles安卓抓包步骤详解
  14. 2021年T电梯修理免费试题及T电梯修理考试试卷
  15. HBuilderX 配置 夜神模拟器
  16. 关于win10微软商店打不开的99%解决办法
  17. me909嵌入式linux,树莓派驱动ME909s-821
  18. STM32使用M/T法检测单路脉冲
  19. android 表情包下载,表情包制作pro
  20. nginx单点故障的 处理方案keepalived

热门文章

  1. html购物车内部处理样式,购物车之架构设计
  2. 凡人如何让自己的工作独一无二
  3. C#将百分制转换为五分制(if_else if 语句实现)
  4. sql server 发布订阅_Mick的SQL基础教程 2月24日-25日
  5. 超导百年:物理学“圣杯”是如何诞生的?
  6. Lifecycle 源码详解
  7. pygame clock.tick
  8. Flask之jinja2
  9. 大杀器!苹果A10X处理器曝光:10nm工艺 全新GPU加成!
  10. AutoCAD 2023 入门与进阶