Featured image of post C语言生成随机数

C语言生成随机数

C语言生成随机数的几种方法

# 生成随机数

在C语言中,生成随机数可以使用stdlib.h头文件里的rand()来生成,例如:

1
2
3
4
5
6
7
#include <stdio.h>
#include <stdlib.h>
int main(){
    int a = rand();
    printf("%d\n",a);
    return 0;
}

rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。

但是这样生成的随机数每次开启程序都是一样的,则需要使用srand()来重新播种,一般常与<time.h>里的time()函数一起使用。

1
srand((unsigned)time(NULL));

# 连续生成多个随机数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
    int a, i;
    srand((unsigned)time(NULL));
    //使用for循环生成10个随机数
    for (i = 0; i < 10; i++) {
        a = rand();
        printf("%d ", a);
    }
    return 0;
}

# 生成指定范围的随机数

想要生成指定范围的随机数,只要进行%运算就好了

1
2
int a = rand() % 10;    //产生0~9的随机数
int a = rand() % 10 + 1;    //产生1~10的随机数

# 连续生成不重复的随机数

这就是本文的重点了ヾ(•ω•`)o (其实就是为了记下这个算法才水了一篇文章)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
int *GetRandom(int m)
{ //根据给定的m生成随机不重复的数组a
    int i, n, w, t;
    int *a;
    n = 2 * m;
    srand((unsigned int)time(0));
    a = (int *)malloc(n * sizeof(int));
    for (i = 0; i < n; i++)
        a[i] = i + 1;
    for (i = 1; i <= m; i++)
    {
        w = rand() % (n - i) + i;
        t = a[i];
        a[i] = a[w];
        a[w] = t;
    }
    return a;
}
Licensed under CC BY-NC-SA 4.0