rand5生成rand3和rand7


问题:
给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。

 

思路:先扩区间,再取模,即构造大的整数区间,限制整数区间,最后映射整数区间。

rand7

int Rand5()
{
	return rand()%5+1;
}
int Rand7()
{
	int ret;
	while(1)
	{
		//构造出等概率的范围(1-25)
		ret = (Rand5()-1)*5 + Rand5();
		//舍弃22-25
		if(ret >= 22)
			continue;
		else
			return ret%7+1;
	}
}

  

rand3

int Rand3()
{
	int ret;
	while(1)
	{
		ret = (Rand5()-1)*5 + Rand5();
		if(ret>=25)
			continue;
		else
			return ret % 3 + 1;
	}
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM