一个下三角矩阵第一行有一个数,第二行有两个数,第三行有三个数,如此类推,第n行有n个数。
1
2 3
4 5 6
7 8 9 10
。。。。。。。
输入1,会得到(1,1)
输入2,会得到(2,1)
输入8,会得到(4,2)
故输入正整数x,得到行列号(i,j)
假设在i前面有i行(有点绕口),属于第j列
满足条件:
1)1+2+。。。+i+j=x
2) j<=i+1
3)i>0;j>0
联合1)2)得 1+2+。。。+i+(i+1)>=x
上式即(i+2)*(i+1)/2>=x
=> i^2+3i+2*(1-x)>=0
令上式取等号,及由3)得
i=(-3+sqrt(3^2 - 4*2(1-x)))/2
=(-3+sqrt(8x+1))/2
由于是>=x ,故i向上取整
j=x-(i+1)*i/2
检验上述结论的正确性
输入8,得
i = (-3+sqrt(65))/2)向上取整
故i=ceil((8.06-3)/2)=3
j=8-4*3/2=2
8位置前面有3行,8位置的(i,j)=(4,2)
结果正确