凡客建设网站稳定吗,软件设计专业介绍,营销型网站建设的优势有哪些,php网站开发linux很多人喜欢用 rand()%n产生区间 [0,n]内的一个随机整数。姑且不论这样产生的整数是否仍然均匀分布#xff0c;当 n大于 RAND_MAX 时#xff0c;此法并不能得到期望的结果。由于RAND_MAX 很可能只是32767这么小#xff0c;在使用此法时应当小心。 #include stdio.h当 n大于 RAND_MAX 时此法并不能得到期望的结果。由于RAND_MAX 很可能只是32767这么小在使用此法时应当小心。 #include stdio.h
#include stdlib.h
#include time.h
int n100,m1000;double random()
{return (double)rand()/RAND_MAX;
}//产生[0m-1]闭区间的随机数
double random(int m)
{return (int)(random()*(m-1)0.5);
}int main()
{srand(time(NULL)); //初始化随机数种子 /*程序每次执行时使用一个不同的种子因此用time.h 中的 time(NULL)为参数调用srand。函数返回值是自1970年1月1日0点以来经过的 秒数 。*/
// printf(RAND_MAX: %d\n,RAND_MAX); printf(%d %d\n,m,n); for(int i0;im;i){if(rand()%20) printf(A );else printf(B );int X,Y;for(;;){Xrandom(n)1;Yrandom(n)1;if(X!Y) break;}printf(%d %d\n,X,Y);}return 0;
} /*核心函数式stdlib.h中的rand()它生成一个闭区间 [0,RAND_MAX]的均匀随机整数均匀的含义是该区间内
每个整数被产生的概率相同 其中 RAND_MAX 至少为 327672^15-1,在不同环境下的值可能不同。严格地说
这里的随机数是伪随机数因为它也是由数学公式计算出来的不过在算法领域多数情况下可以把它当作真正
的随机数。 */ 上述代码采取的方法是先除以RAND_MAX,得到 [0,1] 之间的随机实数扩大n-1 倍之后四舍五入再加1 得到 [1,n] 之间的均匀整数。这样做在n很大时“精度”不好好像把图片放大后的“锯齿”但这里的 n 很小这样做已经可以满足要求了。 程序最开始执行了一次 srand(time(NULL)),其中srand函数用来初始化“随机数种子”。简单地说种子是伪随机数计算的依据。种子相同计算出来的“随机数”序列总是相同。如果不调用srand而直接使用rand(),相当于调用过一次srand(1),因此程序每次执行将得到同一套随机数。另外不要在同一个程序每次生成随机数之间都重新调用一次srand。有的初学者抱怨“rand()产生的随机数根本不随机”就是因为误解了srand()的作用——再次强调请只在程序开头调用一次srand,而不要在同一个程序中多次调用。