我的老师告诉我要创建一个算法来解决这个问题,但我似乎无法弄清楚如何使这项工作成功。你能帮我吗?
(a + b)(b + c)(c + a) = 2012
此问题可能有多种解决方案,但c> = b> = a
答案 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(没试过,但应该工作)。