bbn*_*bnn 1 algorithm math triangular pascals-triangle
如何找到弗洛伊德三角中某个数字属于哪一行哪一列?\n\n 1\n 2 3\n 4 5 6\n 7 8 9 10\n11 12 13 14 15\n16 17 18 19 20 21\n22 23 24 25 26 27 28\n29 30 31 32 33 34 35 36\n37 38 39 40 41 42 43 44 45\n46 47 48 49 50 51 52 53 54 55\n
例如,
\n\n提前非常感谢!
\n请注意,第 n 行以 value 结尾 n*(n+1)/2。所以你可以创建二次方程并求解它以获得给定数字 k 的行号
n*(n+1)/2 = k
n^2 + n - 2*k = 0
D = 1 + 8*k
n_row = Ceil((-1 + Sqrt(D)) / 2) //round float value up
Run Code Online (Sandbox Code Playgroud)
例如,对于 k=33,您可以计算
n_row = Ceil((-1 + Sqrt(265)) / 2) =
Ceil(7.639) =
8
Run Code Online (Sandbox Code Playgroud)
有了n_row,找到前一行的最后一个数字以及k在当前行中的位置
n_Column = 33 - n_row * (n_row - 1) / 2 =
33 - 28 =
5
Run Code Online (Sandbox Code Playgroud)
行查找替代方法的伪代码:
sum = 0
row = 0
while sum < k do
row++
sum = sum + row
Run Code Online (Sandbox Code Playgroud)