算法趣题Q3:翻牌

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yk_0311/article/details/82117352
'''
这里有100 张写着数字1~100 的牌,
并按顺序排列着。最开始所有 牌都是背面朝上放置。
某人从第2 张牌开始,隔1 张牌翻牌。然后第2, 4, 6, …, 100 张牌就会变成正面朝上。
接下来,另一个人从第3 张牌开始,隔2 张牌翻牌(原本背面朝上 的,翻转成正面朝上;
原本正面朝上的,翻转成背面朝上)。再接下来, 又有一个人从第 4 张牌开始,隔 3 张牌翻牌。
像这样,从第n 张牌开始,每隔n-1 张牌翻牌,直到没有可翻动 的牌为止。
'''
# 问题:求当所有牌不再变动时,所有背面朝上的牌的数字
ls = [0] * 100  # 建立一个列表,假设0为牌背面朝上,1为牌正面朝上
for i in range(1, 100):  # 100张牌需要99次翻牌
    loction = i
    while loction <= 99:
        if ls[loction] == 0:  # 如果是背面朝上
            ls[loction] = 1
        elif ls[loction] == 1:  # 如果是背面朝上
            ls[loction] = 0
        # 做完一次循环,去改变下一个值
        loction = loction + i + 1
#输出背面朝上的牌
for i in range(100):
    if ls[i]==0:
        print(i+1,end=" ")

输出:

1 4 9 16 25 36 49 64 81 100 

要点:
要想到怎么设置翻牌,翻牌的次数

猜你喜欢

转载自blog.csdn.net/Yk_0311/article/details/82117352
Q3