C# 之 概率随机数

举报
陈言必行 发表于 2021/08/13 23:21:41 2021/08/13
【摘要】 C# 之 概率随机数 一,问题模拟:二,方法设想:三,代码实现: 随机函数是产生随机数的函数。即以等概率产生某一范围(认为规定)内的任意数。例如,产生1~10范围内的整数,随机函数每次都以10%的概率产生1,2,3,……,10中的任何一个数。 概率随机数:是在1-10内产生随机数,但是每个数生成的概率不同。例如1-9概率为10%,10的概率是%90;...

随机函数是产生随机数的函数。即以等概率产生某一范围(认为规定)内的任意数。例如,产生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)); } /// <summary> /// 概率随机数 /// </summary> /// <param name="rate"></param> /// <returns></returns> 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; }
 }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

1.1

文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。

原文链接:czhenya.blog.csdn.net/article/details/111592832

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。