用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]内的随机数,不知这样实现是否正确,运行结果不理想

posted @ 2014-02-26 21:40  卖程序的小歪  阅读(265)  评论(0编辑  收藏  举报