C++-随机数生成-一道笔试题

C++-随机数生成-一道笔试题

虐人心 发布于 2017-07-11 字数 437 浏览 1121 回复 4

可能重复的问题
请教一个随机数相关的算法问题

今年就业形势确实不怎么好啊,笔试题比去年难不少。

有一个题目,想了好久都没有思路,现在发上来,大家提提意见呗~

现在给出一个函数rand5(),它可以产生0到4之间的随机数(整数),要求写出函数rand8(),可以产生0到7之间的随机数(整数)~

大家想想,这样的题应该怎么去思考?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

想挽留 2017-10-24 4 楼

(int)(7*(float(rand5())/4) 呢

归属感 2017-09-07 3 楼

function rand8(){
return (rand5() + rand5() % 4) ;
}
等比例产生随机数,以rand5()为种子,累加8次,结果模8,修改如下:

funcion getSeed($count,$seed){
if($count == 8){
return $seed % 8;
}else{
$seed += rand5();
$count++;
return getSeed($count,$seed);
}
}
function rand8(){
return getSeed(0,0);
}

偏爱自由 2017-09-02 2 楼

function rand8()
{
while (true)
{
$i = 5 * rand5() + rand5();
if( $i < 24 )
{
return $i % 8 ;
}
}
}

rand5() 产生 0 , 1 , 2 , 3 , 4
rand5()*5 产生 0 , 5, 10 , 15 , 25
两者相加产生 0-25的均匀分布
当值小于24 也就是 0-23的时候,对其取模运算,可以得到0-7

模拟10000次生成,所得结果的分布率是(结果:百分比)

2:12
5:13
4:12
6:12
3:12
0:12
7:12
1:12

第二次

4:12
6:12
2:12
7:12
0:12
1:12
5:12
3:12

想挽留 2017-08-03 1 楼

rand5()为0-4,rand5()*2为0-8,0-8 的数值减一的绝对值为0-7.

 function rand8(){
return abs( (rand5() * 2) - 1);
}

over