永发信息网

python编程:有n个人围城一个圈,顺序排号,从第一个人开始报数(1-3),凡是报数为3的

答案:3  悬赏:30  手机版
解决时间 2021-03-03 10:38
python编程:有n个人围城一个圈,顺序排号,从第一个人开始报数(1-3),凡是报数为3的
最佳答案
#!/usr/bin/env python3.6


def out(n):
    q = list(range(1, n+1))
    c = 1
    while len(q) != 1:
        t = []
        for i in q:
            if c != 3:
                t.append(i)
            c += 1
            if c > 3:
                c -= 3
        q = t
    return q[0]


def main():
    n = input('Enter a number: ')
    try:
        n = int(n)
    except Exception as e:
        print('Invalid input.')
        return
    print('The last one is:', out(n))


if __name__ == '__main__':
    main()Enter a number: 3
The last one is: 2
全部回答
1
n=int(input("请输入总人数(从一个报数开始以1编号,逐次递增):"))
a=list(range(1,n+1))
while len(a)>2:
    c = len(a) % 3
    b = []
    if c == 0:
        for i in range(1, len(a) + 1):
            if i % 3 != 0:
                b.append(a[i - 1])
        a = b
        print(a)
    else:
        for i in range(1, len(a) + 1):
            if i % 3 != 0:
                b.append(a[i - 1])
        a = b[-c:] + b[:-c]
        print(b)
        print(a)
print(a)
print("最后剩下人的原始编号为:{}".format(a[1]))
'''解题思路:当人数恰好是3的倍数时,剔除报数中3的倍数的人员编号。但是总人数不为3的倍数时,需要把最后剩下的1个或者2个人取出来,放到剔除3倍数后人员编号的最前面(从新一次报数,这样模拟围城一个圈的效果)。通过while循环不断重复以上操作,直到剩余人数为2,剩下的人员编号即最后留下2个数第二个(报三次数,第1个数为3因此去掉)。'''


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
明星自行车行地址有知道的么?有点事想过去
近视后两只眼睛瞳孔周围棕色的部分的上部分变
皮卡堂怎样卖东西
笔记本电脑如何改密码
【阴沉木鉴别用火烧后表面是黄色的里面是黑的
为什么有电脑盲这种人?
如何将别人QQ空间日志里的视频复制到我空间日
唇釉和染唇液哪个不掉色,吃饭时也不掉色,哪
根据林奈的物种命名法则,以下选项中属于同一
少儿国际象棋培训基地地址在什么地方,想过去
沙特阿拉伯靠沿海的地方热吗
盛荣洗浴中心地址有知道的么?有点事想过去
flex编译出现这个恶心的问题:An internal bu
请问球蛋白偏低,与白球比值偏高会影响公务员
Driving after drinking wine___in China. A.
推荐资讯
成熟男人喜欢盯着一个女人眼睛看,目不转睛,
花样年华2004我想知道这个在什么地方
鸿翔管材配件在什么地方啊,我要过去处理事情
求步步惊心全集 刘诗诗版的 谢谢啦
根据《上市公司重大资产重组办法》的规定,上
最高人民法院法函23号《关于分期履行的合同中
安卓版口袋妖怪空之花神大师球怎么! 谢谢~
三个轮子不带篷子的电动车属于什么车
win10系统recovery磁盘怎么隐藏,win10隐藏re
在病情危重抢救时最常用的是A.口服给药B.静脉
光在玻璃中的传播速度是20万千米每秒,在空气
采用直接电信号作传播信号有什么优缺点?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?