想象一下使用(随机)问题列表的测验.每个问题都有两个属性:
>文字
>回答
当屏幕上显示问题时,会显示三个可能的答案,A,B和C.其中一个答案是问题的正确答案,另外两个答案是未来问题的答案.一个例子来澄清:
Question 1: how much is 2+2? A: 3, B: 4, C: 5
回答完这个问题后,答案B将从屏幕上删除,并出现一个新问题.第一个问题的答案A和C保留在屏幕上,并添加了新答案B:
Question 2: how much 6-3? A: 3, B: 6, C: 5
现在答案A消失了,一个新的问题和答案出现在它的位置:
Question 3: how much is 10/2? A: 2, B: 6, C: 5
该方案继续针对X问题.最简单的编程方法是始终用问题X的新答案替换问题X中的答案.当然这是毫无意义的,因为参加测验的人会很快发现最新添加的答案总是正确的模式. .
我可以想出一个硬编码的顺序,其中问题和答案出现在屏幕上,因此A / B / C之间的良好组合是正确的答案,但我会随机化这个.我找不到以智能方式做到这一点的(数学)算法.问题需要随机,但答案不能.有时问题X的答案应该已经作为选项A B或C添加了几个问题,因为它变得相关,但有时候最新的答案也可以添加到该问题的正确答案中.
我的问题:我可以用什么技术或算法来解决这个问题?
>输入:{text,answer}列表
>输出:列表
{text,answerA,answerB,answerC},其中一个A / B / C必须是
正确答案,并且列表中的两个相邻项目之间只有一个
A / B / C可以是不同的.
最佳答案 这是我的策略.假设总是正确的答案消失.
>让我们将输入问题集命名为Q.
>创建一个数组(我们将其命名为A),大小为3
>从Q中随机挑选3个问题并将其推送到A(从Q中删除它们)
>从A中随机选择一个问题
>显示已挑选问题的文本,选项是A中的3个答案
>用户选择其中一个,但我们假设总是正确的答案消失
>从Q中选择另一个问题并替换A中的当前问题(从Q中删除)
>转到4并重复直到Q为空
对于最后两个问题,他们没有足够的干扰因素,因此您可能会产生随机干扰物或选择一些使用过的干扰物.
%如果Q是一个数组,您可以通过交换随机拾取的元素和最后一个有效元素来有效地删除元素.然后,您可以重复执行rand()%NUM_REMAINING_QUESTIONS之类的操作.