解题思路:所有人看成一个列表,报到3时出圈看成3之前的人移到列表最后去,继续报3再移到后面去直到只乘2人,第一个报1和3出圈
n = int(input())
if n ==1:
    print(1)
else:
    ls = list(range(1,n+1):
    while len(ls)>2:  #循环执行
        lt = ls[:2]   #去掉3后要移到最的列表前部分
        lh = ls[3:]   #去掉3后后半部分
        ls = lh+lt    #把两部分连起来
    print(ls[1])


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

千秋入话 1年前 回复TA
#稍微完善了一下
n = int(input())
if n ==1:
    print(1)
else:
    ls = list(range(1,n+1))
    n = ls
    while len(ls)>2:
        lt = ls[:2]
        lh = ls[3:]
        ls = lh+lt
    if len(ls) == 2:
        ls = ls[1:]
        print(n.index(ls[0])+1)
千秋入话 1年前 回复TA
建议再看一遍题目问的是什么