如何实现从{0、90、180、270}指定集合中随机抽取数字的方法
离散固定候选值随机生成实现方案
核心实现逻辑
- 将目标候选值
0、90、180、270存入固定数组 - 随机生成范围在
[0,3]的合法数组下标 - 返回下标对应的数组元素即可
你现有编写的randomNum是用于生成连续区间随机数的工具,无法直接适配离散候选值的抽取需求,可按如下两种方案调整:
方案1:针对当前需求的最简实现
int randomRotate() { static const int candidates[] = {0, 90, 180, 270}; int count = sizeof(candidates) / sizeof(candidates[0]); // 生成0~count-1的随机下标 int index = rand() % count; return candidates[index]; }
方案2:基于原有randomNum函数改造实现
首先修复原有randomNum的逻辑问题,原代码生成的区间范围不符合[min, max]闭区间的预期,修正后如下:
// 修正后:返回值范围为[min, max]的连续随机整数 int randomNum(int min, int max) { return rand() % (max - min + 1) + min; }
调用时先生成合法下标再取对应候选值:
int candidates[] = {0, 90, 180, 270}; int result = candidates[randomNum(0, 3)];
注意事项
rand()函数使用前需要在程序初始化阶段调用一次srand((unsigned int)time(NULL));设置随机种子,避免每次运行程序生成的随机序列完全一致。
内容的提问来源于stack exchange,提问作者Jennifer
相关产品推荐
相关产品推荐

