范围内递增和递减数字的总量

Total amount of increasing and decreasing numbers in a range

总结

在这种情况下,递增 数字将是数字从左向右移动时递增的数字,例如 145783489 3347778.

一个递减的数字是一样的,只是相反,例如84320931

给定一个介于 1 和 10 之间的数字 x,如果不使用 force/iteration方法?


前几个 x 值的示例图表

+---+-------+
| X | Total |
+---+-------+
| 0 |     1 |
| 1 |    10 |
| 2 |   100 |
| 3 |   475 |
| 4 |  1675 |
| 5 |  4954 |
+---+-------+

如果要计算递增数的个数,可以建一个二维的table,行对应涉及的数,列对应位数。然后您插入 i 位数的递增数字,在单元格中使用最多 j 的数字。第一栏很简单:

      1 digit  2 digits  3 digits ...
>= 0     10
>= 1     9
>= 2     8
>= 3     7
>= 4     6
>= 5     5
>= 6     4
>= 7     3
>= 8     2
>= 9     1

如果要计算下一列,可以参考上一列。假设您要计算 cell(2, 9)(位数大于 9 的两位数)。然后你可以在前面放一个 9 并使用任何数字大于 9 的 1 位数字。所以,只有 1。cell(2, 8) 也是如此。您可以在前面放一个 8 加上数字大于 8 的任何 1 位数字 (cell(1, 8)) 加上您在下面的单元格中使用的相同数字。总的来说:

cell(i, j) = cell(i - 1, j) + cell(i, j + 1)

前几列是:

      1 digit  2 digits  3 digits ...
>= 0     10    10+45=55   55+165=220
>= 1     9     9+36=45    45+120=165
>= 2     8     8+28=36    36+84=120
>= 3     7     7+21=28    28+56=84
>= 4     6     6+15=21    21+35=56
>= 5     5     5+10=15    15+20=35
>= 6     4     4+ 6=10    10+10=20
>= 7     3     3+ 2=6      6+ 4=10
>= 8     2     2+ 1=3      3+ 1=4
>= 9     1          1           1

总数始终为条目cell(digits, 0)。所以有 220 个递增的三位数或更少的数字。

类似的table可以计算出递减的数字。但是,为了计算减少数字的数量,您必须对所有列求和。例如。对于三位数递减的数字:10+55+220=285.

为了计算增加或减少的数字,只需将两个值相加并减去同时增加和减少的数字。对于每个数字,它将有 10。因此对于 3 位数字,您必须计算 220+285-30=475

因此,迭代计算 table。您只需要保留当前列并相应地计算总数即可。