原文地址:关于面试中经常出现的根据一个随机数构造另外的随机数的解法
最近做了一些Tencent及几家公司的面试题,发现有一种关于产生随机数的类型的题目。看到多有大牛们做出来,而且效率很高,也有不知道怎么做的,最近根据几个产生随机数的题目整理一下,发现所有的类似题目可以用一种万能钥匙解决。故分享,欢迎发表不同看法,欢迎吐槽。
题目一:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。
利用随机函数rand()函数生成一个等概率随机生成整数1到5的函数Rand5(),然后根据Rand5()生成Rand7(),代码如下:
#include <iostream>
using namespace std;
int Rand5()
{
int n =1 + rand()%5;
return n;
}
int Rand7()
{
int n ,tmp1 ,tmp2;
do
{
tmp1 = Rand5();
tmp2 = Rand5();
n = (tmp1-1)*5+tmp2;//n是可以取1~25的随机的数。
} while (n>21);//当n>21舍去,这样n只能取1~21,对7取模就能取1~7之间的随机数
return 1+n%7;