gpt4 book ai didi

c++ - 具有检查功能的简单数字生成器,可避免重复

转载 作者:行者123 更新时间:2023-11-30 04:58:47 24 4
gpt4 key购买 nike

我正在尝试编写简单的函数来检查随机生成的值是否已经在数组中。我想简单地达到一个数字生成器而不重复。不幸的是我的代码不起作用。我的意思是它仍然会为我生成重复的值。谁能告诉我我做错了什么?

Checks if value exists in array:

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;

}

Generating random values from specified range:

int generateRandomValue(int from, int to) {  

return (std::rand() % (to-from+1)) + from;

}

Main function:

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 和均匀分布为您提供适当的随机值。

“集合”负责过滤重复项。

如果你只是想打乱一个 vector ,例如数字 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com