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 }