【问题标题】:How can you find the nth digit in a fractal number如何找到分形数中的第 n 个数字
【发布时间】:2019-09-21 08:42:32
【问题描述】:

序列看起来像这样 112123123412345... 如果输入是 55,它应该返回 1,而不是 10。如果输入是 56,它应该返回 0,而不是 1。你明白了。

【问题讨论】:

  • 不,不明白你的问题。你在问什么?要调试代码,您没有显示?为了让你的工作免费完成,期待一个工作程序的代码来实现这个“想法”?抱歉,但您需要展示自己的努力,展示所有需要的信息并提出具体问题。否则问题在这里是题外话。
  • 欢迎来到 StackOverflow。此问题缺少上下文或其他详细信息:请通过提供其他上下文来改进问题,最好包括您对问题的想法以及您为解决该问题所做的任何尝试,包括代码尝试。这些信息可以帮助其他人识别您遇到的困难,并帮助他们写出适合您经验水平的答案。您还需要准确说明您的困难是什么、您对代码的期望、您得到了什么以及任何错误消息。

标签: string math numbers sequence


【解决方案1】:

所以我们有一个由以下组成的序列

1             1 digit      1 digit total
12            2 digits     3 digits total 
123           3 digits     3*(3+1)/2 = 6 digits total 
1234          4 digits     4*(4+1)/2 = 10 digits total
...
123..89       9 digits     9*(9+1)/2 = 45 digits total
123..8910     11 digits    10*(10+1)/2 + 1 = 56
123..891011   13 digits    11*(10+1)/2 + 3 = 69
123..89101112 15 digits    12*(12+1)/2 + 3*(3+1)/2 = 84 digits

这是OEIS Sequence A165145,另见相关序列OEIS A058183

总位数的公式是

f(n) = n*(n+1)/2  + {(n-9)*(n-8)/2 : if n>=10} + {(n-99)*(n-98)/2 : if n>=100) + ...

一些关键点 f(9) = 45, f(99) = 99*100/2 + 90*91/2 = 9045, f(999) = 1,395,495。

寻找第k个数字的大纲算法是

  1. 通过将 k 与边界值 45、9045、1395495 进行比较,找出您在 n
  2. 恢复n的值
  3. 找到第 n 个数字的实际数字,该数字将是 k-f(n)。

如果我们取 10

n*(n+1)/2 + (n-9)*(n-8)/2 
  =  1/2( n^2 + n + n^2 - 17 n + 72)
  =  n^2 - 8 n + 36

所以给定 45

 n = ceil( ( 8 + sqrt(64 - 4 (36 - k)))/2) 

对于超出范围的 k,我们需要一个不同的二次公式。

例如取 k = 100,使用公式给出 n=13。直到 12 的所有数字都有 f(12)=84 位,所以第 13 个字符串的第一个数字在位置 85。所以我们正在寻找第 16 个数字。我们可以使用公式

digit(l) :=  l <= 9 ? l : (l%2==0 ? floor((l+10)/20) : ((l-11)/2)%10 ) 

找到实际的数字,即 1。

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2016-02-01
    相关资源
    最近更新 更多