困难的数学/编程任务

时间:2012-01-18 10:03:12

标签: algorithm

我的老师告诉我要创建一个算法来解决这个问题,但我似乎无法弄清楚如何使这项工作成功。你能帮我吗?

(a + b)(b + c)(c + a) = 2012

此问题可能有多种解决方案,但c> = b> = a

2 个答案:

答案 0 :(得分:4)

假设a,b,c必须是整数:

首先将2012年分解为所有可能的3个数字(三元组)。 (你可以先将因子分解成两组数,然后将这些数进一步分解得到三元组)。

然后对于每个三元组(x,y,z)找到解决方案:

a + b = x
b + c = y
a + c = z
c >= b
b >= a

答案 1 :(得分:3)

我很确定会提供更多信息,例如如何解决它(如使用试错法或求解器算法)。对此有何评论?

根据给定的信息:

  • 你有3个变量,所以你需要3个方程来解决这个问题。事实并非如此。这导致得出结论,3个变量中的2个可能(几乎)变为任何值(例如,三个变量中的两个不能为0)。

  • 考虑到我们上面定义的内容(2个变量不会被计算,但是由用户给出 - 或者只是设置为任何值),修改等式非常容易,因此它匹配经典的二次方程: / p>

    (a + b)*(b + c)*(c + a)= 2012

    (a + b)*(b + c)*(c + a) - 2012 = 0

    (a + b)*(a + c) - 2012 /(b + c)= 0

    a * a + a * c + a * b + b * c - 2012 /(b + c)= 0

    a²+(b * c)* a + b * c - 2012 /(b + c)= 0

    不要忘记我们必须确定的唯一真正的变量!

  • 现在我们有一个简单的公式,我们可以用学校数学来解决。

    标准公式x² + px + q = 0可以用数字方式解决: x1 = -p / 2 - sgn(p) * sqrt(pow(p / 2, 2) - q)x2 = q / x1

  • 比较您必须关联的两个公式:

    x = a

    p = b * c

    q = b * c - 2012 /(b + c)

  • 现在缺少的只是解决上面给出的等式。

就是这样。虽然考虑到我最后一次这样做已经有一段时间了,所以我可能在路上的某个地方出错了。所以,请自己解决方程以验证这一点。 :)

编辑: 要使用c> = b> = a解决此问题,只需将一个变量设置为固定数字,例如c = 10000,然后让b从0到c运行,直到你找到一个< b(没试过,但应该工作)。