《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~
在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)
Q21 异或运算三角形
著名的“帕斯卡三角形”的计算法则是“某个数值是其左上角的数和右上角的数之和”。这里我们用异或运算代替单纯的和运算,从第一层开始计算,最终可以得到如图所示的三角形。
问题
自上而下计算时,第 2014 个 0 会出现在哪一层?
※ 第 1 个 0 在第 3 层,第 2、3、4 个 0 都在第 5 层。
from collections import Counter
zero_index = 0
layer_index = 1
layer_numbers = [1]
while zero_index < 2014:
new_layer = [1]
for i in range(len(layer_numbers)-1):
new_layer.append(layer_numbers[i] ^ layer_numbers[i+1])
new_layer.append(1)
layer_numbers = new_layer
zero_index += Counter(layer_numbers)[0]
layer_index += 1
print("第2014个0会出现在第‘%s’层" % layer_index)
运行结果:
第2014个0会出现在第‘75’层