《程序员的算法趣题》-(日)增井敏克 Python解题 -- (Q03)

《程序员的算法趣题》-(日)增井敏克 , 书中为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,

猜你喜欢

转载自blog.csdn.net/cloudly89/article/details/84133790