现在我正在尝试创建一个函数来检查用户的选择是否已经在数组中,如果它确实如此,则告诉您选择差异编号。我怎么能这样做?
答案 0 :(得分:1)
你的意思是这样吗?
bool CheckNumberIsValid()
{
for(int i = 0 ; i < array_length; ++i)
{
if(array[i] == user_selection)
return false;
}
return true;
}
至少应该给你一个线索。
答案 1 :(得分:1)
std::find
出了什么问题?如果你得到end
迭代器,那么
值不在数组中;否则就是。或者如果这是家庭作业,
你不被允许使用标准库,一个简单的while循环
应该做的诀窍:这是一个标准的线性搜索,算法
可以在任何地方找到。 (另一方面,一些文章
在使用Google搜索时弹出的内容非常糟糕。你真的
应该使用标准实现:
Iterator
find( Iterator begin, Iterator end, ValueType target )
{
while ( begin != end && *begin != target )
++ begin;
return begin;
}
简单,有效,并证明有效。)
答案 2 :(得分:1)
[添加 post factum ]哦,作业标签。好吧,那么它不会给你带来太大的好处,但是 - 我会留下我的答案,因为它可以对浏览SO的其他人有所帮助。
如果你需要在一个范围内有很多独特的随机数 - 比如来自0..45100
的45000个随机数 - 那么你应该看看这会如何使用以下方法产生问题:
while (size_of_range > v.size()) {
int n = // get random
if ( /* n is not already in v */ ) {
v.push_back(n);
}
}
如果池的大小和你想要获得的范围很接近,并且池大小不是一个非常小的整数 - 那么获取一个尚未放入的随机数会变得越来越难。矢量/阵列。
在这种情况下,您可以更好地使用std::vector
(在<vector>
)和std::random_shuffle
(在<algorithm>
中):
unsigned short start = 10; // the minimum value of a pool
unsigned short step = 1; // for 10,11,12,13,14... values in the vector
// initialize the pool of 45100 numbers
std::vector<unsigned long> pool(45100);
for (unsigned long i = 0, j = start; i < pool.size(); ++i, j += step) {
pool[i] = j;
}
// get 45000 numbers from the pool without repetitions
std::random_shuffle(pool.begin(), pool.end());
return std::vector<unsigned long>(pool.begin(), pool.begin() + 45000);
您显然可以使用任何类型,但您需要相应地初始化向量,因此它包含您想要的所有可能值。
请注意,如果您确实需要池中的几乎所有数字,那么内存开销可能并不重要,您将获得良好的性能。使用rand()
并进行检查将花费大量时间,如果RAND_MAX
等于32767
,那么它将是一个无限循环。
但是,如果您只需要很少的值,则内存开销会很明显。第一种方法通常会更快。
答案 3 :(得分:0)
如果它确实需要是数组,则需要迭代或使用算法头中的find函数。好吧,我建议你把数字放在一个集合中,因为查找速度很快,使用set :: find函数
参考:stl set
答案 4 :(得分:0)
这些是关于如何解决这些问题的一些步骤(伪代码,因为这是一个家庭作业问题):
HTH,
斯利拉姆。