《程序员的算法趣题》-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言。有兴趣的同学,可以购书阅读~
在此更新个人编写的Python版,仅供学习使用。(运行环境:Python3.6)
Q03 翻牌
这里有 100 张写着数字 1~100 的牌,并按顺序排列着。最开始所有牌都是背面朝上放置。某人从第 2 张牌开始,隔 1 张牌翻牌。然后第 2,4, 6, …, 100 张牌就会变成正面朝上。
接下来,另一个人从第 3 张牌开始,隔 2 张牌翻牌(原本背面朝上的,翻转成正面朝上;原本正面朝上的,翻转成背面朝上)。再接下来,又有一个人从第 4 张牌开始,隔 3 张牌翻牌(图下图 )。像这样,从第 n 张牌开始,每隔 n-1 张牌翻牌,直到没有可翻动的牌为止。
问题
求当所有牌不再变动时,所有背面朝上的牌的数字。
# 0 表背面, 1 表正面
card_list = [[i, 0] for i in range(1, 101)]
for counter in range(2, 101):
jumper = counter
pos = counter - 1
while pos < len(card_list):
card_list[pos][1] = not card_list[pos][1]
pos += jumper
print("所有牌面朝上的数字为,")
for card in card_list:
if card[1] == 0:
print(card[0], end=",")
运行结果:
所有牌面朝上的数字为,
1,4,9,16,25,36,49,64,81,100,