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;
	}
}

  

原文地址:https://www.cnblogs.com/lvpengbo/p/14470159.html