请用C++:用随机数产生10组36选7的号码,每组中有7个号,不能重号。排序后从小到大输出。
时间: 2024-12-19 11:17:54 浏览: 18
在C++中,你可以使用<random>和<algorithm>这两个库来生成随机数,并通过数组和循环来保证每个组合都是唯一的。下面是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
// 定义组合大小和候选数范围
const int SELECTED_NUM = 7;
const int TOTAL_NUM = 36;
std::vector<int> generateRandomCombination() {
std::vector<int> numbers(TOTAL_NUM);
// 初始化1-36的整数
for (int i = 0; i < numbers.size(); ++i) {
numbers[i] = i + 1;
}
// 使用随机数生成器
std::random_device rd;
std::mt19937 gen(rd()); // Mersenne Twister算法
std::shuffle(numbers.begin(), numbers.end(), gen);
// 提取前SELECTED_NUM个元素,去重并返回
numbers.erase(unique(numbers.begin(), numbers.end()), numbers.end());
if (numbers.size() != SELECTED_NUM) {
throw std::runtime_error("Failed to generate unique numbers");
}
return numbers;
}
int main() {
try {
std::vector<int> combinations(10);
for (size_t i = 0; i < 10; ++i) {
combinations[i] = generateRandomCombination();
}
// 对每个组合进行排序并打印
for (const auto& combination : combinations) {
std::sort(combination.begin(), combination.end());
std::cout << "Combination " << i+1 << ": ";
for (int num : combination) {
std::cout << num << " ";
}
std::cout << "\n";
}
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这个程序首先创建一个包含1到36的整数向量,然后通过`std::shuffle`函数打乱顺序。接着,使用`unique`函数去除重复的数字,如果结果不是所需的长度,则抛出异常。最后,对每个生成的组合进行排序并输出。
注意,因为是随机生成,所以每次运行可能会得到不同的结果。如果你需要重复生成特定的组合,可以在生成新的随机组合之前检查是否已经存在。
阅读全文