C提供的标准随机函数是 rand(),返回 0 ~ RAND_MAX,共 RAND_MAX + 1 个随机数,如果我需要更大的随机数范围应如何做? 而且 rand() 返回的是伪随机数,就是说不管运行多少次结果都是一样。用srand() 解决。 试设计: long random(long n);返回 0 ~ n-1 间的等概率随机数 分析思路: 以 0 ~ 1的等概率为中介,先将 rand() 返回的概率数转化到 0 ~ 1 之间,在转化到 0 ~ n 之间。 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> long random(long n) { double r = (double)rand() / RAND_MAX; return (long)(r * n); } int main() { long n, t1 = 0, t2 = 0; while(true){ printf("输入 n 值:"); scanf("%ld", &n); srand(time(NULL)); for(int i = 0;i < n * 100;i++){ long t = random(n); if(t == 1)t1++; else if(t == n - 1)t2++; } printf("出现次数\n"); printf("1: %ld\t%ld: %ld\n", t1, n - 1, t2); printf("对应概率\n"); printf("1: %g\t", (double)t1 / n / 100); printf("%ld: %g\n", n - 1, (double)t2 / n / 100); } return 0; } 参考rickone的Blog http://programfan.com/blog/article.asp?id=3890

评论