由一个随机数产生另外一个随机数,最关键的问题是,如何实现等概率映射?
下面是我的rand5产生rand7的实现:
主要思路是将rand5映射到rand(5~30),然后抛去多余的几个,将剩下的21个数每三个映射到1~7之间得数。
1 #include <iostream> 2 #include <string> 3 #include <memory.h> 4 #include <vector> 5 #include <sstream> 6 #include <math.h> 7 #include <climits> 8 #include <algorithm> 9 #include <cstdlib> 10 using namespace std; 11 12 int generate_5() 13 { 14 return 1+rand()%5; 15 } 16 17 int generate_7() 18 { 19 int tmp = 30; 20 while(tmp > 26) 21 { 22 tmp = (5*generate_5()+generate_5()); 23 } 24 return (tmp-3)/3; 25 } 26 27 int main() 28 { 29 int cnt = 0; 30 while(cnt < 70) 31 { 32 cout<<generate_7()<<endl; 33 ++cnt; 34 } 35 return 0; 36 }