rand5()得到rand3()或rand7()类型题:通过rand n()实现rand m()

news/2024/6/17 23:09:24 标签: 概率论

文章目录

  • rand5()得到rand3()
  • rand5()得到rand7()
  • 通过rand n()实现rand m()

rand5()得到rand3()

通过rand5实现rand3很好实现,rand5的取值为[1,2,3,4,5]的值,但是rand3的取值[1,2,3],由此可得,当rand5随机到4,5时可以重新随机,因为每次随机到的概率是相同的。所以随机到[1,2,3]的概率也是相同的,随机也符合rand3的随机数。

int rand3()
{
	int n = 5;
	// rand5 [1,2,3,4,5]
	while (n > 3)
	{
		n = rand5();
	}
	return n;
}

rand5()得到rand7()

但是通过rand5怎么求rand7呢?因为rand7为[1,2,3,4,5,6,7],但是rand5仅仅是[1,2,3,4,5],根据上面rand5得到rand3就可以知道,随机数比当前大就可以。所以我们要比当前大的数,并且概率相同。

不妨我们rand5 - 1得到[0,1,2,3,4]的数,再乘以5得到[0,5,10,15,20]这五个数的随机数。这时我们可以把rand5+(rand5 - 1) * 5,两部分分别是[1,2,3,4,5]和[0,5,10,15,20]。分别相加得到[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],此时我们发现[1-25]没有相同的数,都是等概率的。所以我们可以求出rand7了,可以优化得到[1-3]为rand7的[4,6]为rand7的2。以此类推[19-21]为随机数的7,[22-25]是重新随机。

int Rand7()
{
	int x;
	do
	{
		x = Rand5() + (Rand5() - 1) * 5;
	} while (x > 21)
		return x % 7 + 1;
}

通过rand n()实现rand m()

通过rand5推出rand7我们得到一个公式,就是Rand5() + (Rand5() - 1) * 5,所以我们得到了rand n + (rand n - 1) * n,这个公式。那么问题来了,怎么把rand5推出rand70呢。因为通过上面的公式最多才[1-25]呀。

思考一下????

不多说直接分析:因为[1,2,3,4,5]+[0,5,10,15,20]+[0,20,40,60,80],这是多少呢?

突然发现这是[1-105]的随机数呀,废话不多说,直接代码:

int Rand7()
{
	int x;
	do
	{
		x = Rand5() + (Rand5() - 1) * 5 + (rand5() - 1) * 20;
	} while (x > 70)
		return x;
}

http://www.niftyadmin.cn/n/1739844.html

相关文章

html上传做成按钮,html表单文件上传按钮

在CSS文件中使用此代码.它在Chrome中适用于我.input[typefile] {-webkit-appearance: textfield;position: relative;-webkit-box-sizing: border-box;}input[typefile]::-webkit-file-upload-button {width: 0;padding: 0;margin: 0;-webkit-appearance: none;border: none;}/…

【C++从青铜到王者】第二十四篇:C++的类型转换

系列文章目录 文章目录系列文章目录前言一、C语言中的类型转换二、为什么C需要四种类型转换三、C强制类型转换1.static_cast类型转换2.reinterpret_cast类型转换3.const_cast类型转换4.dynamic_cast类型转换5.explicit总结前言 一、C语言中的类型转换 在C语言中,如…

HTTPS 加密算法过程

文章目录一、HTTPS协议概念二、加密算法三、HTTP访问过程一、HTTPS协议概念 1、HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。 2、HTTPS 协议&#xff0…

Android 内核镜像签名,Docker 的镜像签名

应用上云的过程中,过了部署关和应用改造关之后,安全就是下一个大问题了。对于容器化应用来说,镜像的安全是个非常根本的问题,例如 Harbor 中集成了 Clair 组件,用于对镜像进行漏洞扫描;之前介绍的 Trivy 也…

【C++从青铜到王者】第二十五篇:C++智能指针

系列文章目录 文章目录系列文章目录前言一、常见面试题1. malloc/free和new/delete的区别2. 内存泄漏1.内存泄漏概念与危害2.内存泄漏分类(了解)3.如何检测内存泄漏(了解)4.如何避免内存泄漏5.如何一次在堆上申请4G的内存&#xf…

ios html渲染,IOS Html富文本渲染方式:DTCoreText、WKWebView、UIWebView的内存占用对比...

在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在后端的富文本编辑中,Html应用比较普遍,所以其实需要处理的Html富文本显示的问题,以下这三种方式肯定不是最优的显示Html富文本的方式&#xff…

计算机基础知识讲座听后感,一次计算机讲座的心得体会

在教育教学工作中,很多时候运用word进行文字处理,包括表格制作都用word,觉得还不错,但是经过学校的计算机培训后,才知道excel制表简单实用。本期计算机培训的内容是电子表格,我就认真学习了excel&#xff0…

数组越界会发生什么

文章目录一、数组越界会发生什么二、 数组越界详解一、数组越界会发生什么 C语言非常重视运行时的效率,所以没有进行数组越界检查,而C继承了C的效率要求,自然也不做数组越界检查。(检查数据越界,编译器就必须在生成的…