为数学计算生成假答案

Generate fake answers for a math calculation

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

到目前为止我有

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编写。

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

(一) 7
(b) 4
(c) 5

答案必须是 (c) 5.

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

举个例子。假设问题是 38 + 65。我会这样解决问题:

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

这些是我执行的个人操作

(1) 8 + 5 => 13
(2)进位1
(3) 1 + 3 + 6 => 10
(4)进位1

生成与人们常犯的错误相匹配的错误答案的好方法是什么?只需将错误注入上述 4 个步骤之一即可。

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

这是一个常见问题。

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

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