出圈python(ACM、蓝桥杯刷题)

题目:设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。

输入格式

输入多行,每行2个数,分别表示n和m.

输出格式

计算每一行中最后剩下这个人的编号.

样例输入

10 3

样例输出

4

我的代码:这是我自己的代码,但是在刷题系统里面一直是50分,如果有发现问题的伙伴可以在评论区交流一下,然后我提交了另外一个博主的代码(已在下面展示),系统检测还是50分,就很奇怪。

 

n,m = map(int,input().split())
circal= [i for i in range(1,n+1)]
num=0
while len(circal)>=1:
    js = 0 # 每次循环统计一下被删除的个数,不然删除的值的索引会有问题
    for i in range(len(circal)):# i的值不会随着del 删除元素而发生改变,是最一开始的值
        num+=1
        if num == m:
            num = 0
            del circal[i-js] # 所以这里要减去出圈的人,索引才是对的
            js+=1
    if len(circal)==1:
        print(circal[0])
        break

另外一个博主的代码:

n,m = map(int,input().split())
circle=list(range(1,n+1))
num=1
i=1
while len(circle)!=1:
    circle.append(circle.pop(0)) #把已报数的人取出放到队尾,以此实现围成圈循环往复
    num+=1
    if num==m:
        del circle[0] #把报到规定数字的人踢出圈子
        num=1 #重新从1开始报数
        i += 1
print(circle[0])

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值