mxyx

5随机到7随机的C++实现

一、5随机到7随机

 1 //给定条件
 2 int Rand1To5(){
 3       return (int)rand() % 5 + 1;
 4 }
 5 
 6 //实现代码,使用插空法和筛的过程
 7 int Rand1To7(){
 8     int tmp = 0;
 9     do{
10         tmp = (Rand1To5() - 1) * 5 + Rand1To5() - 1;
11     }while (tmp > 20)
12     return tmp % 7 + 1;
13 }

二、给定一个以p概率产生0,以1-p概率产生1的随机函数Rand01p,实现等概论随机产生1-6的随机函数Rand1To6。

 1 //给定条件
 2 double Rand(){
 3     return (double) (rand() % 1000) / 1000.0;
 4 }
 5 
 6 int Rand01p(){
 7     double p = 0.5;
 8     return Rand() < p ? 0 : 1; 
 9 }
10 
11 //实现步骤,显示实现0-1
12 int Rand0To1(){
13     int num = 0;
14     do{
15         num = Rand01p();
16     while (num == Rand01p())
17     return num;
18 }
19 
20 //实现0-3
21 int Rand0To3(){
22     return (int) (Rand0To1() * 2 + Rand0To1());
23 }
24 
25 //1-8,筛除7,8
26 int Rand1To6(){
27     int tmp = 0;
28     do{
29         tmp = Rand0To3() * 2 + Rand0To1() + 1; 
30     }while (tmp > 6)
31     return tmp;
32 }
33 
34 //另一种思路,先填空在筛选
35 int Rand1To6(){
36     int tmp = 0;
37     do{
38         tmp = Rand0To3 * 4 + Rand0To3;
39     }while (tmp > 11)
40     return tmp % 6 + 1;
41 }

 

posted on 2018-03-03 19:58  mxyx  阅读(266)  评论(0编辑  收藏  举报

导航