其实,这些数字可以看作都是分布在一个立体的空间中,那么这些数字都在一个平面中,可以找到满足相加能得到这些数的所有结果。
用二位数组,两个下标为x,y坐标,而数组值为x+y,而所有的数都在可以写作(x,y,x+y),可以看到,这些数字在固定数的直线上,比如说上边例子,就有6条直线。可以把不满足条件的,数组值赋为某值(比如0)以便区分是否满足条件。而,原先的数(我们将要求得)是有,大小顺序的,最小的数不会大于,数表中最小数的1/2,因此以第一个数作叠代,迭代条件符合时,所涉及的所有下标既是所要求的。
条件:可以用迷宫方法,设的数组有两个下标,直到第一个后,当有该值下标的数在数表中,可以得到另外一个下标值,(该下标知道我们怎样走下一步)。如果依次做下去,必定能够循环,如果循环到shumu+1(shumu是原先数字的个数,可以设n为数表的个数,则满足shumu*(shumu-1)==n*2时即可)如果得到的是我们第一个最小的数字,即表示成功。当然要把满足全部条件的数挨个验证,确实很麻烦,而且思路要完全正确,否则错误是难免的。