若已知生成0~6的rand7(),求生成0~4的rand5(),则一个方法就是不断生成0~7的数,直到这个数满足0~4就返回。

int rand5(){
    int res;
    do{
        res = rand7();
    }while(res >4);
    return res;
}

现在已知生成0~4的rand5(),求解生成0~6的rand7(),就是想办法利用rand5()去生成0~大于6的数字,可以使用rand5()+rand5()*5,这个式子可以生成0~24的随机数,每个数字的组成只有一种可能,所以是等概率地生成0~24里的每一个数字。

当0~24中大于6的数字可以对7取余得到0~6的数字,但是为了保证出现0~6的数字的每一个概率相同,我们只能在0~20(20=24/7*7-1)中去选择,大于20的数,要被舍弃。

所以实现代码为:

int rand7(){
    int res;
    do{
        res = rand5()+rand5()*5;//生成0~24的随机数
    }while(res>=24/7*7);
    return res%7;
}

 参考地址:http://blog.csdn.net/u010025211/article/details/49668017

相关文章:

  • 2021-10-05
  • 2021-06-14
  • 2022-12-23
  • 2021-10-01
  • 2022-12-23
  • 2022-12-23
  • 2021-05-17
  • 2022-02-13
猜你喜欢
  • 2022-03-09
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
  • 2022-12-23
  • 2021-07-20
  • 2022-12-23
相关资源
相似解决方案