题目(来源于:程序员的算法趣题):
有 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))
View Code