c语言实现随机排列n个数

在C语言吧看到有人问这个问题,怎么生成条件随机数,例如生成1到100范围的随机数,后生成的随机数不能与前面生成的随机数重复.

我的想法是随机生成1到100的数,逐个保存到长度为100的数组中,每次保存时遍历前面已经保存的数,如果出现重复,则舍弃这个随机数,重新生成,再遍历。。直至把数组填满。

等我把代码写出来的时候,原帖已经被权限狗删了,只好把代码记录到这里。

#include
#include
#include

//随机数生成函数
int randomNumber(){
	return rand()%100+1;
}

int main(){
	srand((unsigned)time(NULL));//生成随机数的种子
	int a[100]={NULL};//初始化数组
	int n=0;
	while(n<100){
		int m=randomNumber();
		bool flag=0;
		for(int j=0;j

另一种方案是:原问题等价于随机排列1到100,因此可以先把1到100用循环语句写进数组;然后进入一个很大的循环(循环次数越多越好),每次循环随机生成两个0到99的数,将这两个数为下标的元素对调,最后得到的就是随机排列的1到100了。

#include
#include
#include
int main(){
	srand((unsigned int)time(NULL));
	int a[100];
	for(int i=0;i<100;i++){
		a[i]=i+1;
	}
	for(int j=0;j<1000;j++){
		int m=rand()%100;
		int n=rand()%100;
		int k;
		k=a[m];
		a[m]=a[n];
		a[n]=k;
	}
	for (int i=0;i<100;i++){
		printf("%d\n",a[i]);
	}
	return 0;
}


你可能感兴趣的:(c语言实现随机排列n个数)