【问题标题】:Generate fake answers for a math calculation为数学计算生成假答案
【发布时间】:2016-03-30 23:11:42
【问题描述】:

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

到现在为止

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

【问题讨论】:

  • 好像你只处理算术和原始操作。在这种情况下,我将实现一个名为 ArithmeticOperation 的简单委托,该委托将采用 2 个参数并添加/相乘/...它们。在应用程序中,我将使用 1 个正确的 ArithmeticOperation 并选择另一个随机 ArithmeticOperation。
  • 我投票决定将此问题作为题外话来结束,因为它更多地与提出好的测验答案有关,而不是与编程有关。
  • @Bart 我不同意。弗拉德,阅读C# Delegates
  • 为什么要让简单的数学题做多项选择?为什么不只是 38 + 65 = _______?
  • 因为按正确或错误答案的按钮比在输入字段中输入 1-2 个字母要快:)

标签: c# math random unity3d calculator


【解决方案1】:

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

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

答案必须是 (c) 5。

一个更好的方法是模拟人们通常如何做加法、减法、乘法、除法等。多位数字的加法通常涉及从右向左移动、添加对齐的数字和“携带 1”。有时人们会因为忘记带 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。

【讨论】:

  • 不过,您必须为每种受支持的操作执行此操作。如果实际的问题是由多个操作组成的,甚至是括号,你会有更多有趣的工作要做!
【解决方案2】:

这是一个常见问题。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多