读书人

一路面试题算法

发布时间: 2013-03-12 11:19:35 作者: rapoo

一道面试题算法

题目为:给你1-1000个连续自然数,然后从中随机去掉两个,再打乱顺序,要求只遍历一次,求出被去掉的两个数。

有一种算法,用的异或,实际上是遍历不只一次,具体异或的算法:http://blog.leezhong.com/tech/2011/06/03/php-xor-find-num.html

今天想到另一种算法,用方程求解。

m = ( 1 + 2 + ...+ 1000) - (998 个的和) x + y

n = ( 1 * 2 * .... * 1000) / ( 998 个的积)x * y

经公式计算:

x = sqart( pow( m , 2 ) / 4 - n ) + m /2

y = m - x


代码测试:

double x = 3 ;double y = 39 ;double m = x + y ;double n = x * y ;x = Math.sqrt( m * m / 4d - n ) + m / 2 ;y = m - x ;System.out.println( x );System.out.println( y );


读书人网 >编程

热点推荐