不重复随机数列生成
2015-03-14 18:18
429 查看
问题描述:
随机生成k个不重复的随机数(或生成0至k-1以随机顺序构成的数列)算法:
rand不直接产生值,而是产生下标,下标可以重复,但要保证数组中都是不重复且没有输出过的数字①一个大小为k的数组temp,temp[i]=i;一个随机下标的范围range,range初始为k;一个随机数组result
②随机生成0至range-1的一个下标index,将temp[index]放入result
③temp[index]=temp[range-1]
④range--,转②
代码:
#pragma once #include<iostream> #include<vector> #include<time.h> using namespace std; //返回k个不同随机数按序组成的vector(以随机顺序返回0至k-1构成的vector vector<int> diffRand(int k) { vector<int> result(k); vector<int> flag(k); for (int i = 0; i < k; i++) flag[i] = i; int range = k;//随机下标的范围 srand((unsigned int)time(0)); for (int i = 0; i < k; i++) { int randIndex = rand() % range; result[i] = flag[randIndex]; flag[randIndex] = flag[range - 1]; range--; } return result; } void main() { vector<int> result = diffRand(10); for (int i = 0; i < (int)result.size(); i++) cout << result[i] << ' '; cout << endl; system("pause"); }
相关文章推荐
- 【Java】Java复习笔记-三大排序算法,堆栈队列,生成无重复的随机数列
- 不重复随机数列生成算法
- 算法-随机不重复数列生成
- 不重复随机数列生成算法
- 不重复随机数列生成算法
- 不重复随机数列生成算法
- 不重复随机数列的生成算法
- 不重复随机数列生成算法
- 不重复随机数列生成算法2-数组有效位置的最后一个元素移动到当前位置
- 不重复随机数列生成算法
- 随机生成0~N之间的N个不重复整数
- 随机生成不重复的随机数
- 随机生成100个不重复的随机数
- 如何生成100万个无序不重复随机值
- [转]如何快速生成100万不重复的8位均匀分布的随机编号?
- C#随机生成不重复字符串
- 随机生成不重复字符串
- 开辟一个空房间,随机生成一个有30个数的整形数组,找出其中的重复数字,输出其余数字
- php 生成随机字符串(无重复)
- 随机生成10条不重复长度为10以内的字符串,进行排序