我正在尝试编写简单的函数来检查数组中是否已经随机生成了值。我想简单地找到一个数字生成器而不重复。不幸的是,我的代码无法正常工作。我的意思是,它仍然会产生重复的值。谁能告诉我我在做什么错?
bool valueExistsInArray(int* array, int value) {
if ((sizeof(array) / sizeof(*array)) <= 0)
return false;
int i = 0;
do {
if (array[i] == value)
return true;
i++;
} while (i < (sizeof(array) / sizeof(*array)));
return false;
}
int generateRandomValue(int from, int to) {
return (std::rand() % (to-from+1)) + from;
}
int main()
{
srand((unsigned int)time(NULL));
int array[10];
int i = 0;
do {
int value = generateRandomValue(1, 10);
if (!valueExistsInArray(array, value)) {
array[i] = value;
i++;
}
} while (i < (sizeof(array) / sizeof(*array)));
for (int i = 0; i < (sizeof(array) / sizeof(*array)); i++)
std::cout << "Index: " << i << " Value: " << array[i] << "\n";
_getch();
return 0;
}
最佳答案
一个简单的例子,如何使用现代C++
#include <random>
#include <set>
#include <iostream>
int main()
{
const uint32_t minValue = 0;
const uint32_t maxValue = 1000000;
const size_t numValues = 100;
std::random_device rd;
std::uniform_int_distribution<int> dist(minValue, maxValue);
std::set<uint32_t> myNumbers;
while (myNumbers.size() < numValues)
{
myNumbers.insert(dist(rd));
}
for (const auto& val : myNumbers)
{
std::cout << val << "\n";
}
return 0;
}
random_device和均匀分布为您提供适当的随机值。
“集合”负责过滤重复项。
如果您只想改组例如数字0到100使用std::shuffle,例如:
#include "stdafx.h"
#include <algorithm>
#include <random>
#include <vector>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 g(rd());
std::vector<uint32_t> myNumbers(100);
std::iota(myNumbers.begin(), myNumbers.end(), 0);
std::shuffle(myNumbers.begin(), myNumbers.end(), g);
for (const auto& val : myNumbers)
{
std::cout << val << "\n";
}
return 0;
}
关于c++ - 简单的数字生成器,带有检查功能,避免重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51527488/