NoFear

导航

巧妙的无重复随机数方法

Posted on 2012-07-09 13:17  Fear_Hao  阅读(253)  评论(0编辑  收藏  举报
View Code
    int rand_arr[54] = {0};
    int rand_idx = 0;
    int src_arr[54] = {0};
    int src_end = 53;
    int tempsize = 0;
    int rand_range = 54;

    srand(NULL);

    //初始src数组
    for(int i=0; i!=54; i++)
        src_arr[i] = i;

    for(int i=0; i!=54; i++)
    {
        //生成随机数 得到下标
        tempsize = rand()%rand_range;
        //由下标拿数值 存入rand数组
        rand_arr[rand_idx++] = src_arr[tempsize];
        //最后一位数值填充到被拿走的位置
        src_arr[tempsize] = src_arr[src_end];
        //缩小随机数产生范围
        rand_range--;
        //src数组末尾下标--
        src_end--;
    }

    for(int i=0; i!=54; i++)
    {
        printf("%d ",rand_arr[i]+1);
    }