如何解决这个等式求解“在整数数组中查找重复”

时间:2016-03-04 23:52:12

标签: algorithm equation

我在看这个问题和讨论: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。

感谢任何帮助。

1 个答案:

答案 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.