#include<iostream> #include<vector> #include<string> using namespace std; int main() { int arr[55] = { 0 }; int sum = 0; while (true) { int a = rand() % 55; if (a != arr[a]) { arr[a] = a; cout << a << " "; sum++; } if (sum == 54) break; } return 0; } 写分析思路
时间: 2025-06-25 08:13:56 浏览: 14
### C++代码实现分析:生成不重复随机数并输出
#### 1. 随机数生成基础
C++中的`rand()`函数用于生成伪随机数,其范围是从0到`RAND_MAX`[^1]。为了确保每次运行程序时生成不同的随机数序列,在使用`rand()`之前通常会调用`srand(unsigned seed)`来设置种子值。常见的做法是以当前时间作为种子,通过`(unsigned)time(NULL)`获取系统时间戳。
#### 2. 不重复随机数的生成逻辑
要生成一组不重复的随机数,可以通过以下方法实现:
- **初始化候选集合**
创建一个包含所有可能数值的列表(或向量),例如从0到n-1的所有整数存储在一个容器中[^2]。
- **随机抽取与移除**
使用`rand()`函数生成一个索引值,对应于候选集合中的某个位置。取出该位置上的值作为随机数,并将其从候选集合中移除,从而避免再次被选中。这种操作可以通过交换目标元素和集合末尾元素的方式优化性能[^2]。
以下是基于此思路的具体实现代码及其解析:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib> // 包含rand(), srand()
#include <ctime> // 包含time()
using namespace std;
// 函数声明:生成长度为n的不重复随机数数组
int* generateUniqueRandomNumbers(int n);
int main() {
int size;
cout << "请输入需要生成的随机数数量: ";
cin >> size;
// 调用函数生成不重复随机数
int* result = generateUniqueRandomNumbers(size);
// 输出结果
cout << "生成的不重复随机数序列为:" << endl;
for (int i = 0; i < size && result != nullptr; ++i) {
cout << result[i] << " ";
}
cout << endl;
delete[] result; // 释放动态分配内存
return 0;
}
// 实现细节:生成指定数量的不重复随机数
int* generateUniqueRandomNumbers(int n) {
if (n <= 0) return nullptr; // 输入校验
vector<int> candidates; // 候选项集合
for (int i = 0; i < n; ++i) {
candidates.push_back(i); // 初始化候选项
}
// 设置随机数种子
srand((unsigned)time(nullptr));
int* uniqueRandNums = new int[n]; // 动态分配空间存储结果
for (int i = 0; i < n; ++i) {
// 随机选取一个候选项
int index = rand() % candidates.size();
// 将选定项加入结果集
uniqueRandNums[i] = candidates[index];
// 移除已使用的候选项
swap(candidates[index], candidates.back());
candidates.pop_back();
}
return uniqueRandNums;
}
```
#### 3. 关键点说明
- **动态数组管理**
结果存储在动态分配的数组中,便于灵活处理不同规模的数据需求[^4]。注意在程序结束前需手动释放内存以防止泄漏。
- **效率考虑**
利用`swap`配合`pop_back`的方法代替直接删除中间元素,有效降低复杂度至O(n)[^2]。
- **边界条件检查**
对输入参数进行合理性验证,当请求的数量小于等于零时返回空指针表示错误情况。
---
###
阅读全文
相关推荐


















