当前位置: 代码迷 >> C语言 >> Yang的数表
  详细解决方案

Yang的数表

热度:103   发布时间:2006-11-25 09:36:35.0
以下是引用Welton在2006-11-24 15:39:52的发言:
只要知道数表的位置,也就是知道那两个数相加得到的那个数就行了,就是求解线形方程组了!

说明白点伐...
这样说好含糊呀...


----------------解决方案--------------------------------------------------------
不是一一对应关系,也就是答案不具有唯一性
如 5 6 7 9 10 11
对应着
2 3 4 7
或1 4 5 6


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