博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rand7生成rand10,rand1生成rand6,rand2生成rand5(包含了rand2生成rand3)
阅读量:6374 次
发布时间:2019-06-23

本文共 973 字,大约阅读时间需要 3 分钟。

这种题要分两步,第一步是“插空儿”,第二步是“筛”

1.rand7生成rand10

只要是10的倍数就好

int rand10() {        int num;        do{            num = (rand7() - 1) * 7 + rand7() - 1;        }        while(num >= 40);        return num % 10 + 1;    }

概率计算:

https://blog.csdn.net/excellentlizhensbfhw/article/details/81174138

再将这49个数分为两部分, {0, 1, 2, ... , 39}和{40, 41, .., 48},如果生成的数处于第2部分,再将第二部分等概率分到第1部分,总概率 = p = \frac{\frac{40}{49}*\frac{1}{40}}{\frac{40}{49}*\frac{1}{40} + \frac{9}{49}} = \frac{1}{10}

 

2.rand01生成rand6(这个是面试指南上的题目)

int rand03(){    return rand01() * 2 + rand01();}int rand6(){    int num;    do{        num = rand03() * 4 + rand03();    }    while(num >= 12);    return num % 6 + 1;}

第二题稍稍改改:rand01是一个以p概率产生0以1-p概率产生1的随机函数

这个时候就需要把rand01改成等概率的rand01p

int rand01p(){    int num;    do{        num = rand01();    }    while(num == rand01());    return num;}

 

 

3.rand2生成rand5

int rand03(){    return (rand2 - 1) * 2 + rand2 - 1;}int rand5(){    int num;    do{        num = rand03() * 4 + rand03();    }    while(num > 14);    return num % 5 + 1;}

2经过插空儿后无法大于5,或者说5的倍数,所以只能通过辅助的生成03这种方式再来生成一次

你可能感兴趣的文章
javascript中全局变量的定义
查看>>
带你走进SAP项目实施过程——前言(0)
查看>>
How do I measure JVM startup time?
查看>>
SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析
查看>>
Cocos Creator 获取节点的方式
查看>>
React Native(五)——获取设备信息react-native-device-info
查看>>
Ubuntu 16.04 -- 同时配置Nginx(转发)和frp(内网映射)和HTTPS(ca加密) - 端口转发
查看>>
dig linux下的使用
查看>>
通过socket实现处理多个连接,send和resv都是有数量限制的
查看>>
proposal_layer.py层解读
查看>>
SpringMVC自定义视图Excel视图和PDF视图
查看>>
selenium截取具体元素图片(python版)
查看>>
Javascript登录页面“记住密码”实现
查看>>
关于素数定理的一个延拓
查看>>
WinPE作为启动硬盘
查看>>
linux apache虚拟主机配置(基于ip,端口,域名)
查看>>
CSS 选择器
查看>>
Python字符串、元组、列表、字典互相转换的方法
查看>>
RabbitMQ的应用场景以及基本原理介绍(转)
查看>>
Nginx:413 Request Entity Too Large解决
查看>>