随机答案/问题顺序的算法

4
假设有一个使用随机问题列表的测验。每个问题有两个属性:
文本
答案
当问题显示在屏幕上时,会显示三个可能的答案:A、B和C。其中一个是问题的正确答案,另外两个是未来问题的答案。以下是一个例子:
问题1:2+2等于多少?A:3,B:4,C:5
回答这个问题后,答案B从屏幕上移除,新问题出现了。第一个问题的答案A和C仍然在屏幕上,但添加了一个新答案B:
问题2:6-3等于多少?A:3,B:6(正确答案),C:5
现在答案A消失了,并且在其位置上出现一个新问题和答案:
问题3:10/2等于多少?A:2(正确答案),B:6,C:5
这种方案持续X个问题。编写最简单的算法是始终用问题X+1的新答案替换问题X的答案。当然这是没有意义的,因为参加测验的人很快就会发现这样的规律,即最新添加的答案总是正确的。
我可以想出一种硬编码的顺序,在屏幕上出现问题和答案之间有良好的A/B/C混合,但我想要随机化这个过程。我找不到一种聪明的方法来解决这个问题。问题需要是随机的,但答案不能随机。有时,在问题变得相关之前,问题X的答案应该已经作为选项A、B或C添加几个问题了,但有时最新的答案也可以成为该问题的正确答案。
我的问题是:我可以使用什么技术或算法来解决这个问题?
输入:{文本,答案}列表
输出:{文本,答案A,答案B,答案C}列表,其中A/B/C中的一个必须是正确答案,并且在列表中相邻的两个项目之间只能有一个A/B/C不同。

如果用户选择了错误答案,那么是正确答案消失还是错误答案消失呢? - Hanjoung Lee
如果选择了错误答案,程序不会发生任何事情。只有在选择正确答案时,UI/程序才会进入新状态(除非出现选择的答案不正确的消息)。 - user1884155
1个回答

1
这是我的策略。假设始终正确的答案会消失。
  1. 将输入问题集命名为 Q
  2. 创建一个数组(我们将其命名为 A),大小为 3
  3. Q 中随机选择 3 个问题,并将它们推入 A(从 Q 中删除)
  4. A 中随机选择一个问题
  5. 显示所选问题的文本和 3 个 答案 选项在 A
  6. 用户选择其中一个,但我们假设始终正确的答案会消失
  7. Q 中选择另一个问题,并替换当前问题在 A 中(从 Q 中删除)
  8. 回到步骤 4 并重复,直到 Q 为空
对于最后两个问题,它们可能没有足够的干扰选项,因此您可以生成随机干扰选项或选择一些已使用过的选项。

% 如果Q是一个数组,你可以通过交换随机选择的元素和最后一个有效元素来高效地删除一个元素。然后,你可以重复执行类似于rand() % NUM_REMAINING_QUESTIONS的操作。


因为数组是一种排序的数据结构,我们在这个长度为3的数组中用相同的索引替换问题,所以答案保持在它们固定的位置,这很聪明。 - user1884155

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接