用01随机函数构造[a,b]整数范围随机数
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define RAND_0_1 (rand()&0x1) 4 5 int random(int a, int b); 6 7 int main(){ 8 int s[100]; 9 10 for (int i=0; i<100; i++) { 11 s[i] = 0; 12 } 13 14 for (int i=0; i<1000000; i++) { 15 s[random(0, 99)]++; 16 } 17 18 for (int i=0; i<100; i++) printf("%d\n", s[i]); 19 20 system("pause"); 21 return 0; 22 } 23 24 int random(int a, int b) { 25 int d, D = b - a; 26 int ret = 0; 27 do { 28 ret = 0; 29 d = b - a; 30 while (d) { 31 ret = ret<<1; 32 ret |= RAND_0_1; 33 d = d>>1; 34 } 35 } while(ret > D); 36 return ret + a; 37 }
算法导论(第二版)里第五章有关于用1/0随机函数产生[a, b]内的随机数,不知这样实现是否正确,运行结果不理想