#
生成随机数
在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;
}
|