产生不重复的随机数

来源:互联网 发布:理发店记账软件 编辑:程序博客网 时间:2024/04/29 04:40

声明: 仅个人小记

效果展示

连续运行三次的结果

这里写图片描述

这里写图片描述

这里写图片描述

代码部分

#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 100/*    功能:         产生不重复的随机数    输入: a[]  一维数组,  length 指定数组a的长度    输出: a 中为0~length的所有值随机乱序存放     思想: 本来是按序放置的0~length数表,我们随出一个随机数作为交换次数,对该数表中数据进行交换 */void nonredundantRandomNumber(int a[], int length) // 不重复的随机数 {    int i, k, t, times;    for (i = 0; i < length; ++ i)         a[i] = i;    times = rand()%length; // 这个随机值指定交换次数     for (i = 0; i < times; i ++) {        k = rand()%length;        t = a[i];        a[i] = a[k];        a[k] = t;    }    return;}int main(void){    int a[N];    srand(time(NULL));     nonredundantRandomNumber(a,N);    // 下面是输出显示结果     for (int i = 0; i < N; ++ i) {        printf("%2d ",a[i]);        if ((i+1)%10 == 0) printf("\n");    }    return 0;}