#include <iostream>
#include <stdio.h>
#include <set>
using namespace std;
/*
问题:生成[0 ,maxval]范围内m各随机整数的有序序列
分析:用一个set来确保不重复,用一个随机函数来确保得到指定范围内的随机数
输入:
100(元素最大值) 10(输出的元素个数)
输出;
输出10个0~100且有序的元素
关键:
1实现一个集合set,包含插入,有序输出到数组中
class IntSetSTL
{
private:
set<int> _datas;
int _maxSize;
int _maxVal;
public:
IntSetSTL(int maxElements , int maxVal)
{
_maxSize = maxElements;
_maxVal = maxVal;
}
*/
class IntSetSTL
{
private:
set<int> _datas;
int _maxSize;
int _maxVal;
public:
IntSetSTL(int maxElements , int maxVal)
{
_maxSize = maxElements;
_maxVal = maxVal;
}
//插入元素
void insert(int t)
{
if( size() > _maxSize)
{
return;
}
_datas.insert(t);
}
int size()
{
return _datas.size();
}
//将元素有序输出到v数组中
void report(int* v)
{
int j = 0;
for(set<int>::iterator it = _datas.begin() ; it != _datas.end() ; it++)
{
v[j++] = *it;
}
}
};
int randRange(int min ,int max)
{
if(min > max)
{
int temp = min;
min = max;
max = min;
}
return ( rand() % (max - min + 1) + min );
}
void print(int* array , int size)
{
if(NULL == array || size <= 0)
{
cout << "no result" << endl;
return;
}
for(int i = 0 ; i < size ; i++)
{
cout << array[i] << " ";
}
cout << endl;
}
void process()
{
int maxVal , size;
while(cin >> maxVal >> size)
{
IntSetSTL myset(size , maxVal);
int* pArr = new int[size + 1];
while(myset.size() < size)
{
int value = randRange(0 , maxVal);
myset.insert(value);
}
myset.report(pArr);
print(pArr , size);
delete[] pArr;
}
}
int main(int argc , char* argv[])
{
process();
getchar();
return 0;
}
编程珠玑: 13章 搜索 13.1生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
最新推荐文章于 2019-09-27 15:53:35 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)