想象一个(随机)问题清单的测验。每个问题都有两个属性:
当在屏幕上显示问题时,将显示三个可能的答案,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的答案应该已经在几个问题前作为选项AB或C添加了,因为它变得很重要,但是有时可以添加最新的答案,也可以作为该问题的正确答案。
我的问题:我可以使用哪些技术或算法来解决此问题?
答案 0 :(得分:1)
这是我的策略。假设总是正确的答案消失了。
Q
A
)Q
中随机抽取3个问题并将其推送到A
(从Q
中删除它们)A
随机选择一个问题A
Q
中选择另一个问题,并替换为A
中的当前问题(从Q
中删除它)Q
为空对于最后两个问题,它们将没有足够的干扰因素,因此您可能会生成随机干扰因素或选择一些二手干扰因素。
%如果Q
是一个数组,则可以通过交换随机选择的元素和最后一个有效元素来有效地删除元素。然后,您可以重复执行类似rand() % NUM_REMAINING_QUESTIONS
的操作。