正整数的数字根(也是重复的数字和)是在每次迭代中使用前一次迭代的结果来计算数字总和的,通过对数字求和的迭代过程获得的(单个数字)值。该过程一直持续到达到一位数字为止。
例如,65536的数字根为7,因为6 + 5 + 5 + 3 + 6 = 25和2 + 5 = 7。
对所有数字根进行排序没有多大意义,因为它只会以无限多个1 s开始。
取而代之的是,我们将创建所有单个数字整数及其数字根的列表,然后是所有两位数字及其数字根的列表,然后是三倍,四倍等等。
现在,对于这些列表中的每一个,我们将对其进行排序,以使所有数字根为1的整数首先出现,然后所有数字根为2的整数出现,依此类推。排序将是稳定的,因此具有一定数字根的整数列表在排序后应按升序排列。
最后,我们将这些列表连接成一个序列。此序列将从所有个位数开始,然后是所有两位数(按其数字根排序),然后是所有三位数,依此类推。
挑战:
以一个正整数n作为输入,并按上述顺序输出第n个数字。您可以选择列表是0索引还是1索引。
该序列如下所示:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 19, 28, 37, 46, 55, 64, 73, 82, 91, 11, 20, 29 ...
72, 81, 90, 99, 100, 109, 118, ...
981, 990, 999, 1000, 1009, 1018, 1027, ...
测试用例:
测试用例为1索引。
n f(n)
9 9
10 10
11 19
40 13
41 22
42 31
43 40
44 49
45 58
600 105
601 114
602 123
603 132
604 141
605 150
4050 1453
4051 1462
4052 1471
4053 1480
4054 1489
4055 1498
易于复制:
n = 9, 10, 11, 40, 41, 42, 43, 44, 45, 600, 601, 602, 603, 604, 605, 4050, 4051, 4052, 4053, 4054, 4055,
f(n) = 9, 10, 19, 13, 22, 31, 40, 49, 58, 105, 114, 123, 132, 141, 150, 1453, 1462, 1471, 1480, 1489, 1498
说明:
- 您可能不会输出全部n个第一元素。您只能输出第n个。
- 从理论上讲,该代码必须适用于所有最大为10 ^ 9的整数,但是对于大于999的输入,如果它在TIO(或具有时间限制的其他解释器)上超时,则可以。
- 鼓励解释。
这是代码高尔夫,因此每种语言中最短的代码胜出!即使您想使用的语言短于其他解决方案,也不要气other其他解决方案!