找到至少有一个0,1和A

时间:2017-06-22 06:07:00

标签: algorithm math combinations probability combinatorics

我试图解决项目欧拉问题162- https://projecteuler.net/problem=162

  

在十六进制数中,系统使用16表示数字   不同的数字:

     

0,1,2,3,4,5,6,7,8,9,A,B,C,d,E,F

     

以十进制数字系统写入时的十六进制数AF   等于10x16 + 15 = 175。

     

在3位十六进制数字10A,1A0,A10和A01中的数字   0,1和A都存在。

     

与基数为10的数字相似,我们不用编写十六进制数字   领先的零。

     

包含最多十六进制十六进制的十六进制数   数字是否存在,所有数字0,1和A至少出现一次?   将答案作为十六进制数字给出。

在一些小代码的帮助下,这看起来很简单:

import math

def ncr(n,r):
    return math.factorial(n)//math.factorial(r)//math.factorial(n-r)

sum =0
n=16
for x in range(1,n):
    for y in range(1,n):
        for z in range(1,n):
            if(x+y+z <= n):
                s = x+y+z
                t = ncr(n,s)*ncr(s,x)*ncr(y+z,y)*pow(13,n-s)
                sum += t

for x in range (1,n-1):
    for y in range (1,n-1):
        if(x+y<=n-1):
            s = x+y
            t = ncr(n-1,s)*ncr(s,x)*pow(14,n-1-s)
            sum -= t

print(sum)

我的逻辑 -

让我们说现在,对于x + y + z小于或等于16的每种可能情况,数字中都有x 0&s,y 1&s 39和s A&#39; ,我定义s = x + y + z

现在我从 16 总数中选择 s 位数

然后 x 来自那些 s 的地方,

然后 y 来自 y + z 的剩余位置,

然后,最后,剩下的 16-s 位置可以被除0,1,A之外的任何其他数字填充,所以 13 ^(16-s)

现在由于这些情况涉及0出现在第一个位置,我添加第二个循环来减去所有值为0的第一个位置和至少一个1和A.我也使用相同的逻辑。

现在我不知道我是在犯一个巨大的逻辑错误,还是只是一个小小的愚蠢错误,但我真的无法弄清楚为什么我没有得到正确答案。

我不需要正确的答案或正确的方法来解决这个问题,只是想知道这个逻辑/代码有什么问题,感谢任何帮助。

由于

P.S。 - 这是我在这里的第一个问题,请告诉我问问题的方式是否有问题。

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到的一个问题是,您只考虑16位数字,而问题是“最多包含16个十六进制数字”。