21计科程一帆


私信TA

用户名:uq_88617846948

访问量:5467

签 名:

搞哥毛哥在上,俺寻思俺是一个最大最强的技术小子

等  级
排  名 947
经  验 3450
参赛次数 2
文章发表 52
年  龄 19
在职情况 学生
学  校 石河子大学
专  业 计算机科学与技术

  自我简介:

憨憨一个,欢迎大佬指正

解题思路:本题可以将所有的人从1到m设置好序号,然后放到列表里面,序号存在表示该人尚未出圈,每次遍历时index更新为(index+(m-1))%len(c),保证下标在超过范围时能够正确判断,每一次都进行判断删除直到列表长度为1时停止,此时列表中的唯一的序号c[0]就是所求的最后一个人的初始编号

注意事项:(index+(m-1))%len(c),下标的更新公式,不嫌麻烦的话也可以每遍历一边列表就将剩下的序号都加上n,做个变量记录加了几次,最后输出的时候减掉;另外这道题是有多组测试用例,所以要考虑无输入时退出循环,个人建议还是用try-except,这个比较好用


参考代码:

while True:
   try:
       a,b=map(int,input().split())
       if a==0:
           break
       c=[i for i in range(1,a+1)]
       index=0
       while len(c)>1:
           index=(index+b-1)%len(c)
           del c[index]
       print(c[0])
   except EOFError:
       break

 

0.0分

1 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »