我试图解决一个任务,其中有13盏灯,从1开始,每5盏灯关闭一次,当计数达到13时,再次从第一项开始。该函数应返回指示灯关闭的顺序。在这种情况下,对于包含13项的列表,返回列表将是[5, 10, 2, 8, 1, 9, 4, 13, 12, 3, 7, 11, 6]
。此外,关闭的灯将不再计算
所以我要解决这个问题的方法是有一个名为turnedon
的列表,也就是[1,2,3,4,5,6,7,8,9,10,11,12,13]
和一个名为orderoff
的空列表,每当turnedon
列表中的灯关闭时,就附加到这个列表中。因此,尽管turnedon
不是空的,但在turnedon
列表中迭代,附加关闭的灯光,并从turnedon
列表中删除该turnedoff
灯光(如果有意义的话)。但是我不知道while循环应该包含什么。任何想法都将不胜感激
def orderoff():
n=13
turnedon=[]
for n in range(1,n+1):
turnedon.append(n)
orderoff=[]
while turneon !=[]:
这是可行的,但结果与您的不同:
这个问题相当于众所周知的Josephus problem,其中
n
囚犯站成一个圆圈,他们按顺序被杀害,每一次,下一个被杀害的人从上一个人绕圆圈走k
步;台阶只算在剩下的囚犯身上。Python中的一个示例解决方案可以在Rosetta code website上找到,我在下面稍微调整了一下:例如:
我认为一个更好的解决方案是使用一个循环,每次增加位移,并使用模块将数字保持在范围内
相关问题 更多 >
编程相关推荐