C# 之 概率随机数
发布日期:2021-06-29 19:10:08
浏览次数:4
分类:技术文章
本文共 1235 字,大约阅读时间需要 4 分钟。
C# 之 概率随机数
随机函数是产生随机数的函数。即以等概率产生某一范围(认为规定)内的任意数。例如,产生1~10范围内的整数,随机函数每次都以10%的概率产生1,2,3,……,10中的任何一个数。
概率随机数:是在1-10内产生随机数,但是每个数生成的概率不同。例如1-9概率为10%,10的概率是%90;
一,问题模拟:
比如:求1-5的数指定概率下的随机,概率如下:
数字 | 概率 |
---|---|
1 | 10% |
2 | 10% |
3 | 10% |
4 | 20% |
5 | 50% |
二,方法设想:
1, 将每个数按照概率占比放到一个数组中(比如:[1,2,3,4,4,5,5,5,5] ),然后求【0~数组长度】的随机数,所求值再取其数组值,即为所求;
2, 将指定概率作为权值添加到一个数组
- 将指定概率作为权值添加到一个数组:arr;
- 求数组arr中的所有数值的和:total ;
- 求 [0-total]中间的随机数:r;
- 找这个随机数r的在数组arr哪个arr[i] 中,然后返回这个:i。
- 使用这个i解决问题(比如上述问题:i+1即为所求)
三,代码实现:
class Program{ static void Main(string[] args) { // 概率数组 int[] arr = new int[] { 10, 10, 10, 20, 50 }; Console.WriteLine("概率随机数~"); Console.WriteLine("随机到的索引:"+ ProbabilityRandomRumber(arr)); } ////// 概率随机数 /// /// ///public static int ProbabilityRandomRumber(int[] rate) { int total = 0; for (int i = 0; i < rate.Length; i++) { total += rate[i]; } Random myRandom = new Random(); int r = myRandom.Next(0, total); Console.WriteLine("随机数是:" + r); int t = 0; for (int i = 0; i < rate.Length; i++) { t += rate[i]; if (r < t) return i; } return 0; } }
转载地址:https://czhenya.blog.csdn.net/article/details/111592832 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月05日 12时04分20秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
音视频基础
2019-04-30
流媒体协议HLS解析
2019-04-30
什么是AES算法?(整合版)
2019-04-30
Linux ALSA声卡驱动之一:ALSA架构简介
2019-04-30
在Linux中安装ALSA声卡驱动
2019-04-30
alsa 音频库的移植
2019-04-30
C语言:堆栈溢出一般是由什么原因导致的?
2019-04-30
C语言:线程同步之信号量(sem_init,sem_post,sem_wait)
2019-04-30
Linux ALSA声卡驱动之二:声卡的创建
2019-04-30
Linux ALSA声卡驱动之三:PCM设备的创建
2019-04-30
Linux ALSA声卡驱动之四:Control设备的创建
2019-04-30
Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
2019-04-30
RT-thread相关
2019-04-30
Linux 2.6内核Makefile浅析
2019-04-30
编译和链接的过程
2019-04-30
Git学习(二):git-rev-parse命令初识
2019-04-30
vim字符串替换
2019-04-30
C语言:堆和栈的区别是什么?
2019-04-30