我一直在试图弄清楚如何插入50个独特的随机整数,范围从1到100.我看了其他的例子,但很难转换成我正在使用的代码。有人可以把我放在正确的方向而不改变我有太多的代码吗?
void displayListForward(SortedListInterface<int>* listPtr)
{
cout << "The sorted list contains " << endl;
for (int pos = 1; pos <= listPtr->getLength(); pos++)
{
cout << listPtr->getEntry(pos) << " ";
}
cout << endl << endl;
}
void InsertRandomInts()
{
LinkedSortedList<int> list;
srand((unsigned)time(NULL));
for (int i = 0; i < 50; ++i)
{
int b = rand() % 100 + 1;
list.insertSorted(b);
displayListForward(&list);
}
}
答案 0 :(得分:0)
问题是你让它们与众不同吗?如果是这样,您可以添加帮助函数来搜索现有列表,如果不存在则添加该数字,如果存在,则生成新数字。在另一个数据结构中创建数字,然后在创建节点时在链表中初始化它们也可能更容易。
您可以使用这样的搜索功能,以及InsertRandomInts函数中的条件来确定它是否唯一:
bool search(std::vector<std::int> list, int obj){
for (int i = 0; i < list.size(); i++){
// key already exists in list
if (obj == list[i]){
return true;
}
}
// not found
return false;
}
答案 1 :(得分:0)
首先,C ++比旧的srand
和rand
功能要好得多pseudo-random generation utilities。
其次,std::set
(对于这种情况更好,std::unordered_set
)非常适合获取唯一值的集合。
可以用作
std::random_device r;
std::default_random_engine e1(r());
// To get random numbers between 1 and 100 (inclusive)
std::uniform_int_distribution<int> uniform_dist(1, 100);
// A set to store values
std::unordered_set<int> random_values;
// Loop until we get 50 unique random values
while (random_values.size() < 50)
{
random_values.insert(uniform_dist(e1));
}
// Now there are 50 unique (pseudo) random numbers in the set