C++如何打乱测验题4个cout输出的选项顺序且保留原有校验逻辑
实现方案
你只需要把预先选好的4个选项(正确答案+3个干扰项)存入临时数组,用洗牌算法打乱顺序后输出即可,完全不需要改动原有生成正确答案的逻辑,后续校验用户答案的规则也和之前完全一致。
完整修改后的代码
srand((int)time(0)); // 你原有生成正确答案下标的逻辑完全保留 int random_number = rand() % (max_event_number - 3); // 这里加-3避免数组越界,如果你原有逻辑已经处理越界可以不改这行 // 1. 把4个待输出选项存入临时数组 int options[4] = { final_years[random_number], final_years[random_number + 1], final_years[random_number + 2], final_years[random_number + 3] }; // 2. 用Fisher-Yates算法随机打乱选项顺序 for (int i = 3; i > 0; --i) { int j = rand() % (i + 1); // 交换两个位置的元素 int temp = options[i]; options[i] = options[j]; options[j] = temp; } // 3. 按打乱后的顺序输出选项 for (int i = 0; i < 4; ++i) { std::cout << "\n" << options[i] << std::endl; } std::cout << "\n" << "Please type the correct year : " << std::endl;
方案说明
- 正确答案必然出现在输出的4个选项中,不会出现漏题问题
- 原有校验逻辑完全不需要改动,直接拿用户输入和
final_years[random_number]比对即可判断正误 - 所有选项排列的概率均等,不会出现正确答案固定在某个位置的问题
内容的提问来源于stack exchange,提问作者Alex Pina
相关产品推荐
相关产品推荐

