你如何找到一个数字在弗洛伊德三角中属于哪一行和哪一列?
1个
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45
46 47 48 49 50 51 52 53 54 55
例如,
- 33在第8行第5列(输入33→输出第8行第5列)
- 第10行第1列为46
- 27在第7行第6列
提前致谢!
最佳答案
注意第 n 行 ends with 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
例如,对于k=33你可以计算
n_row = Ceil((-1 + Sqrt(265)) / 2) =
Ceil(7.639) =
8
有n_row,求前一行的最后一个数和k在当前行的位置
n_Column = 33 - n_row * (n_row - 1) / 2 =
33 - 28 =
5
行查找的替代方法的伪代码:
sum = 0
row = 0
while sum < k do
row++
sum = sum + row
关于algorithm - 你如何找到一个数字属于弗洛伊德三角中的哪一行和哪一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39467778/