我试图解决项目欧拉问题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。 - 这是我在这里的第一个问题,请告诉我问问题的方式是否有问题。
答案 0 :(得分:0)
我在您的代码中看到的一个问题是,您只考虑16位数字,而问题是“最多包含16个十六进制数字”。