我在看这个问题和讨论:Easy interview question got harder: given numbers 1..100, find the missing number(s)
用户之一使用以下等式提供了解决方案。 k1 + k2 = x
k1 ^ 2 + k2 ^ 2 = y
代替提供(x-k2)^ 2 + k2 ^ 2 = y
我正在尝试进一步解决这个等式,并提出一个C程序来解决重复的问题。 虽然花了很多时间,但我无法解决这个等式,以获得k1或k2的一面。我总是在方程的两边得到k1或k2。
感谢任何帮助。
答案 0 :(得分:1)
扩展等式
(x - k2)^2 + k2^2 = y
并获取
x^2 - 2xk2 + 2k2^2 = y
或
2k2^2 - 2xk2 + x^2 - y = 0
现在使用公式求解az^2 + bz + c = 0
的二次方程(-b +/- sqrt(b^2 - 4ac))/2a
。仅在我们的案例中z=k2
。所以
k2 = (2x +/- sqrt(4x^2 - 8(x^2 - y))) / 4
或
k2 = (x +/- sqrt(x^2 - 2(x^2 - y))) / 2
= (x +/- sqrt(2y - x^2)) / 2
你可以把
k2 = (x + sqrt(2y - x^2)) / 2
k1 = (x - sqrt(2y - x^2)) / 2.