首页 > 代码库 > 算法题--等概率产生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之间的数.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。