首页 > 其他 > 详细

不重复随机数列生成

时间:2015-03-15 09:36:12      阅读:259      评论:0      收藏:0      [点我收藏+]

问题描述:

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


不重复随机数列生成

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!