首页 > 代码库 > 算法题--等概率产生0和1(有扩展)

算法题--等概率产生0和1(有扩展)

 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 const int k = 20;13 const int n = 500;14 int rand_01()15 {16     int i1 = 0;17     int i2 = 0;18     while(i1 == i2)19     {20         i1 = rand();21         i2 = rand();22     }23     if(i1 == 1)24         return 1;25     else26         return 0;27     return -1;28 }29 30 int rand_1N()31 {32     int res = 0;33     int i;34     for(i = 0 ; i < k;++i)35     {36         if(rand_01() == 1)37         {38             res |= (1<<i);39         }40     }41     if(res > n || res==0)42         return rand_1N();43     return res;44 }45 46 int main()47 {48     cout<<rand_1N()<<endl;49     return 0;50 }

http://blog.csdn.net/iloveyin/article/details/8122049

原来链接里的代码存在问题,可能会一直产生0,所以加个判断

由于各个位都是独立的,所以可以产生0~2^k之间的数.