• 已知可生成0~4的rand5(),实现生成0~6的rand7()


    若已知生成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

  • 相关阅读:
    快速创建ssm项目
    String 的基础知识点梳理一
    消息中间件ActiveMQ
    log4j.properties
    数据库基础
    pycharm快捷键
    HTML其他标签
    HTML基本标签
    概率论基础2
    概率论基础1
  • 原文地址:https://www.cnblogs.com/Carrie-0173/p/6711031.html
Copyright © 2020-2023  润新知