题目(来源于:程序员的算法趣题):
有 100 张写着数字 1~100 的牌,并按依次顺序排列着。最开始所有牌都是背面朝上放置。我们从第 2 张牌开始,隔 1 张牌翻牌。然后第 2,4, 6, …, 100 张牌就会变成正面朝上。接下来,另一个人从第 3 张牌开始,隔 2 张牌翻牌(原本背面朝上的,翻转成正面朝上;原本正面朝上的,翻转成背面上)。再接下来,又有一个人从第 4 张牌开始,隔 3 张牌翻牌( 图1 )。像这样,从第 n 张牌开始,每隔 n-1 张牌翻牌,直到没有可翻动的牌为止。求当所有牌不再变动时,所有背面朝上的牌的数字。
Python代码:欢迎交流。
import numpy as np import datetime start = datetime.datetime.now() flag=np.zeros((100),dtype=np.bool8) backnum=[] for i in range(2,101): j=i-1 while(j<100): flag[j]= not flag[j] j=j+(i) index=0 for item in flag: index=index+1 if(not item): backnum.append(index) end=datetime.datetime.now() spendtime=end-start print("******************************************") print("Result 2 is:") print(backnum) print("Turn Poker 2 Spend time:{}".format(spendtime))