首先,这不是一个功课问题。我正在经历一些组合问题以通过算法解决,我真的只需要开始解决这个问题。
我最初的想法是声明一个大小为17的数组初始化它并运行一个循环来查找数字的出现,比如使用简单的搜索来说“5”。但解决方案看起来很乏味和丑陋。
感谢。
答案 0 :(得分:1)
假设你的意思是0< = l< 10 ^ 16(不是< = 10 ^ 16),此范围内的所有整数都有10位数(允许前导0)。在此范围内总共有10 ^ 16个值。我把问题写成:
数字 n 的数字= 10 ^ 16 - 数字 n 。
那么我们有多少种方法可以在1的地方选择 n ? 9种方式。我们有多少种方式可以放置一个' n'在10s或1的地方? 9 * 9。遵循这个逻辑,有9 ^ 16种方法不将 n 放入16个可能的插槽中。
所以你的答案是10 ^ 16 - 9 ^ 16。
如果你实际上意味着0< = l< = 16,那么该范围只有一个数字,即10 ^ 16。此数字的前导数字为1,因此如果 n = 1,则恰好有10 ^ 16 - 9 ^ 16 + 1个值,其中包含1。如果n!= 1,则前一个答案成立。
答案 1 :(得分:0)
让:
G(m)
是值i
的数量,其中0<=i<=10^m
包含数字n!=0
正如之前的回答所说,当n!=0
时,答案是:
G(m) = 10^m - 9^m
所以,G(16) = 10,000,000,000,000,000 - 1,853,020,188,851,841 = 8,126,979,811,148,159
n=0
时,有两种方法可以查看它。
1)仅计算第一个非零数字后的数字
2)计算所有m
个数字,即使该数字以许多0
个数字开头
对于第二种情况,则n=0
与n!=0
时的答案相同。
F(m)
是值i
的数量,其中0<=i<=10^m
包含数字n=0
对于第一种情况,答案稍微复杂一点。在m
位数字中,第一个数字不是0,但剩余的m-1
数字可以是任何数字。因此,G(m-1)
F(m)= 9 * G(m-1)`定义的数字m-1' digits can contain a zero. Since there are 9 (non zero) possibilities for the leading digit,
。
让
H(m,n)
为值i
的数量,其中0<=i<=10^m
包含数字n
然后:
H(m,n) = G(m)
如果n!=0
,9*G(m-1)
n=0
,其中
G(m) = 10^m - 9^m
因此,H(16,n) = 8,126,979,811,148,159
如果n!=0
和H(16,0) = 7,146,979,811,148,159