您的位置:首页 > 其它

不重复随机数列生成

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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: