为数学计算生成假答案

时间:2015-12-24 14:00:30

标签: c# math random unity3d calculator

我正在制作一个类似于游戏的测验,我生成数学表达式,然后根据生成的数学表达式的结果生成两个假答案。因此,用户可以看到数学表达式并给出三个答案,他需要从中选择正确的答案。

到目前为止我已经

switch(opIndexValue)
{
    case Helper.CASE_ADD:
        answer1 = resultValue + Random.Range(1, 4);
        answer2 = resultValue - Random.Range(1, 4);
        break;
    case Helper.CASE_SUBTR:
        answer1 = resultValue + Random.Range(1, 4);
        answer2 = resultValue - Random.Range(1, 4);
        break;
    case Helper.CASE_MULTI:
        answer1 = resultValue + Random.Range(1, 4);
        answer2 = resultValue - Random.Range(1, 4);
        break;
    case Helper.CASE_DIVIS:
        answer1 = resultValue + Random.Range(1, 4);
        answer2 = resultValue - Random.Range(1, 4);
        break;
}

它看起来很不错,它可以完成这项任务但它的通用性。 如果你是成年人,你很容易在三个人之间推翻正确的解决方案,即使你没有在脑海中计算。

如果你是一名数学家,你会如何产生两个假答案? 另一方面,你会如何产生4个假答案? :)

代码用C#/ Unity3D 5.1.4编写。

2 个答案:

答案 0 :(得分:2)

问题中方法中的错误是三个可能答案的中位数始终是正确的答案。我甚至不需要知道问题是什么:如果可能的答案是

(a)7
(b)4
(c)5

答案必须是(c)5。

更好的方法是模拟人们通常如何进行加法,减法,乘法,除法等。多位数的加法通常涉及从右向左移动,添加对齐的数字,以及"携带1' S&#34。有时人们会因忘记携带1或错误地添加一对单个数字而犯错误。

这是一个例子。让我们说问题是38 + 65.我会解决这个问题:

         1     11     11     <-- carried 1's
  38     38     38     38
+ 65   + 65   + 65   + 65
----   ----   ----   ----
          3     03    103

这些是我执行的个别操作

(1)8 + 5 =&gt; 13个
(2)携带1
(3)1 + 3 + 6 =&gt; 10个
(4)携带1

对于与人们常犯的错误相匹配的问题,会产生错误答案的好方法是什么?只需将错误注入上述4个步骤之一。

例如,如果我通过跳过步骤(2)生成了错误答案,我会得到答案93.

答案 1 :(得分:1)

这是一个常见问题。

一种可能性是寻找其他人创造的解决方案。例如,Thinksy制作了一个Unity插件,可以从他们的服务器请求问题以及正确答案和分散适合多项选择的错误答案。当我上次检查时,他们的系统非常粗糙,仅限于K-2问题,但最终他们可能会有所帮助。

我建议您制作自己的系统,以产生令人分心的错误答案。您不应该假设所有错误都只是在答案中添加一个随机的小数字。通过在其他数字(34 + 57 = 81)中出错或者通过执行错误操作(5 * 6 = 11)或使用错误输入(7 ^ 2 = 64)来犯错误是常见的。因此,请尝试随机选择错误类型,然后确认您不会意外得到正确的答案(1/2 * 1/3 = 1/2 - 1/3)或之前生成的错误答案。