用C++生成在一个区间内的随机数,并排除部份数,如生成1-100中10个除51,79,88以外的整数
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
srand(time(0));
char a[100];
int b = 0;
for (int c = 1; c <= 100; c++)
{
if (c != 51 && c != 79 && c != 88)
{
a[b] = c;
b++;
}
}
for (int d = 0; d < 10; d++)
{
int e = rand() % b;
int f = a[e];
cout << f << " ";
}
return 0;
}
【以下回答由 GPT 生成】
我可以通过使用C++的随机数库和条件判断来解决这个问题。以下是一个实现此功能的示例代码:
#include <iostream>
#include <random>
#include <vector>
// 生成[start, end)范围内的随机数,并排除excludeValues中的特定数值
int generateRandomNumber(int start, int end, const std::vector<int>& excludeValues) {
// 初始化随机数生成器
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(start, end - 1);
int randomNumber;
bool isExcluded;
do {
isExcluded = false;
randomNumber = dis(gen);
// 检查生成的随机数是否在excludeValues中
for (int value : excludeValues) {
if (randomNumber == value) {
isExcluded = true;
break;
}
}
} while (isExcluded); // 如果生成的数在排除列表中,则继续生成随机数
return randomNumber;
}
int main() {
int start = 1;
int end = 101;
std::vector<int> excludeValues = {51, 79, 88};
std::vector<int> randomNumbers;
// 生成10个满足条件的随机数
for (int i = 0; i < 10; i++) {
int randomNumber = generateRandomNumber(start, end, excludeValues);
randomNumbers.push_back(randomNumber);
}
// 输出生成的随机数
for (int randomNumber : randomNumbers) {
std::cout << randomNumber << " ";
}
std::cout << std::endl;
return 0;
}
这段代码使用了C++的随机数库<random>
中的std::random_device
和std::mt19937
来生成随机数,以及std::uniform_int_distribution
来定义生成随机数的范围。我们通过一个循环来检查生成的随机数是否在excludeValues中,如果是,则继续生成直到获得满足条件的随机数。最后,我们将生成的随机数保存在randomNumbers
向量中,并输出结果。
请注意,这个解决方案是一种基本的实现方法,但不保证在特定情况下的效率和随机性。在实际应用中,可能需要根据需求进行优化和改进。
【相关推荐】