我在看这个问题和这里的讨论: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。
如有任何帮助,我们将不胜感激。

最佳答案

展开方程式

(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。只有在我们的情况下。所以
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.

关于algorithm - 如何求解此方程,以解决“在整数数组中查找重复项”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35808173/

10-11 19:12