一个范围内的增加和减少数量的总量

Neo*_*ard -2 algorithm math largenumber

摘要

增加在这种情况下,数目将是一个谁,因为他们从左至右,如移动数字正在增加145783489 3347778.

减少数目将是相同的,除了颠倒,如84320931.

给定x1到10之间的数字,如果不使用强力/迭代类型的方法,您如何计算增加但不减少或减少但不增加的数字的总数?


x的前几个值的示例图表

+---+-------+
| X | Total |
+---+-------+
| 0 |     1 |
| 1 |    10 |
| 2 |   100 |
| 3 |   475 |
| 4 |  1675 |
| 5 |  4954 |
+---+-------+
Run Code Online (Sandbox Code Playgroud)

Nic*_*ler 5

如果要计算增加的​​数量,可以构建一个2D表,其中行对应于所涉及的数字,列对应于数字位数.然后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
Run Code Online (Sandbox Code Playgroud)

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

cell(i, j) = cell(i - 1, j) + cell(i, j + 1)
Run Code Online (Sandbox Code Playgroud)

前几列是:

      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
Run Code Online (Sandbox Code Playgroud)

总数始终是条目cell(digits, 0).所以有220个增加的数字,有三个或更少的数字.

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

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

所以,迭代计算表.您只需保留当前列并相应地计算总数.