重造轮子-random5到random7
来源:互联网 发布:java中求最大公约数 编辑:程序博客网 时间:2024/06/04 18:50
目标:有一个rand5函数可以随机产生0~4这5个数,设计一个rand7函数,利用这个rand5函数随机产生0~6这7个数。
方法:面试这一题,第一想法就是要用编码的思想。那么想表达完所有的7个数需要调用两次rand5函数,因为调用两次rand5函数可以产生的组合为5*5个组合。那么在看看
rand5()产生0,1,2,3,4,
rand5()*5产生0,5,10,15,20
发现rand5()*5+rand5()刚好可以产生从0~24这全部的25个数,因此方法出来了,利用上面的方法产生一个新的数,如果这个数大于20,那么重新再产生一次。否则直接将产生的数除以3就得到对应的数。
代码
class Solution{public:int rand7(){int ran;while((ran = rand5()*5+rand5())>=21);//如果产生的数大于20那么就重复再取数return ran/3;//比如0,1,2除以3则对应数字0,因此直接将结果除以3}private:int rand5(){return rand()%5;//产生[0,4]范围的随机整数}};
再补充一下:
C++中没有random()函数,C中调用stdlib.h头文件则可以使用random(n)函数,这个函数返回0到n-1之间的随机整数。C++中只有rand()函数,这个函数返回0到MAX_INT之间的随机整数。如果要取某个区间的随机整数方法如下,
取[a,b)之间的数,(rand()%(b-a))+a
取[a,b]之间的数,(rand()%(b-a+1))+a
取(a,b]之间的数,(rand()%(b-a))+a+1
这下面的是从网友那里摘录的
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。
0 0
- 重造轮子-random5到random7
- 重造轮子-sqrt
- 重造轮子-最小栈
- 重视积累,不再重造轮子
- 重造轮子:学写函数配接器
- 重造轮子-栈实现队列
- c# List筛选~ 重造轮子
- 服务化框架设计实现(重造轮子,借事修人)
- random7->random10
- 关于轮子跟造轮子。
- 72. 经常重新造轮子
- Python 造轮子/现有轮子 相关资料
- 重造轮子 用递归函数和栈操作逆序一个栈
- 重新造轮子,编写自己的RecordSet
- 开始造轮子
- 不要重复造轮子
- 谈谈自己造轮子
- 不要重复造轮子
- Android Studio导入Project的方法
- centos 7 网络配置( 网关、dns、ip地址配置)
- NYOJ 16 矩形嵌套(DAG上的DP)
- C++: byte和int的相互转化
- Linux下守护进程(daemon)和管道的结合使用(代码保留)
- 重造轮子-random5到random7
- [Android]仿即时通信App界面的实现
- Linux环境使用xampp搭建DVWA渗透测试平台
- 欢迎使用CSDN-markdown编辑器
- java学习笔记多线程学习总结(下)
- Java线程进入
- message_flood
- 下拉刷新效果
- 常见的HTTP状态码