码迷,mamicode.com
首页 > 其他好文 > 详细

不重复随机数列生成

时间:2015-03-15 09:37:43      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:算法   c++   随机数   

问题描述:

随机生成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");
}


不重复随机数列生成

标签:算法   c++   随机数   

原文地址:http://blog.csdn.net/hgqqtql/article/details/44261777

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!