algorithm - 你如何找到一个数字属于弗洛伊德三角中的哪一行和哪一列

标签 algorithm math pascals-triangle triangular

你如何找到一个数字在弗洛伊德三角中属于哪一行和哪一列? 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/

相关文章:

c# - 性能调整 C# 排列和 SHA1 代码

objective-c - 修剪 CGRect 内的直线(2 个 CGPoint)

c++ - 播放具有可变参数的正弦波 - 如何进行相移?

java - 帕斯卡的三角代码在特定行之后失败

java - 帕斯卡三角形正确格式化java

python - 如何解决此 python 代码中缺少 1 个必需的位置参数?

c++ - 对不同变量的 vector 使用排序功能

c++ - 如何计算将 n 个不同的球涂成恰好 c 种不同颜色的方法?

algorithm - 确定两个频率之间的不和谐程度

c - 使用 C 中的 for 循环输出帕斯卡三角形