欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(python)n个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。

程序员文章站 2022-03-04 20:45:34
...

题目:n个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一
人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。
如果你想成为最后两个幸运儿,请问开始时应该站在什么位置?(3<=n<=50)
输入:开始时的人数n。
输出:第1行是选出顺序,第2行是两名幸运儿的开始位置(按升序排列),位置编号之
间用一个空格分开。
理解:这个输入的数不管是奇数还是偶数第一轮淘汰的都是2的倍数,但是以后的话,偶数是淘汰位置在2的倍数上的那个数,奇数是把上轮最后一个数放到第一个数后的位置在2的倍数上的那个数。

n=int(input('请输入n(3<n<=50):'))
list1=[]
list2=[]
for i in range(1,n+1):
    list1.append(i)
def g1():
    for i in list1:
        if i%2==0:
            list1.remove(i)
            list2.append(i)
        else:pass
def shuchu():
    print(list2)
    print(list1)
list3=list1
def erci():
    if len(list1)>2:
        list4 = []
        for i in range(len(list1)):
            if i % 2 != 0:
                list4.append(list1[i])
                list2.append(list1[i])
            else:
                pass
        for i in list4:
            list1.remove(i)
        erci()
    else:
        shuchu()
if n%2==0:
    g1()
    erci()
else:
    a=list3[-1]
    del list3[-1]
    list1=[a]+list3
    g1()
    erci()

(python)n个人围成一圈,并按顺时针依次编号1-n。从编号为1的人开始,按顺时针方向每隔一 人选出一个,剩下的人重新围成一圈,如此循环直到剩下两人,这剩下的两人就是幸运儿。

相关标签: python