2 条题解

  • 0
    @ 2023-2-11 19:36:02
    n=int(input())
    numList1=list(range(1,n+1))
    numList2=[]
    
    idx=1
    while len(numList1)>1:
        for i in range(len(numList1)):
            numList2.append(idx)
            idx+=1
            if idx>3:
                idx=1
    
        numList3=[]
        for i in range(len(numList2)):
            if numList2[i] !=3:
                numList3.append(numList1[i])
        numList2=[]
        numList1=numList3
    print(numList1[0])
    
    • 0
      @ 2023-1-7 11:22:24
      '''
      假设是n=7,
      
      先从头到位报数,报完之后让是报数3的踢出列表
      第一轮 首位从1开始报数
      编号 1 2 3 4 5 6 7
      报数 1 2 3 1 2 3 1
      
      第二轮 由于是模拟围城一圈的效果,所以要接上一轮最后一个数
      编号 1 2 4 5 7
      报数 2 3 1 2 3
      
      第三轮
      编号 1 4 5 
      报数 1 2 3
      
      第四轮
      编号 1 4  
      报数 1 2
          3
      第五轮
      编号 4  
      报数 
      列表就剩一个可以输出
          
      '''
      n =int(input())
      numlist1 = list(range(1,n+1)) # 存储编号1~n
      numlist2 = [] # 存储每个人的报数信息
      
      idx =1 #第一次从1开始报数
      while len(numlist1)>1:
          for i in range(1,len(numlist1)+1):
              numlist2.append(idx)
              idx +=1
              if idx >3: # 超过3就从1开始
                  idx = 1
          
          numlist3 =[]#临时存放 报数不是3的人对于的编号
          for i in range(len(numlist2)): # 人员编号,报数信息的列表索引,一一对应。
              if numlist2[i]!=3: # 报数不为3
                  numlist3.append(numlist1[i]) # 添加对应人员编号
          numlist2=[] # 报数清空,开始新的一轮
          numlist1=numlist3 #将numList1 指向numlist3,构成循环。
      print(numlist1[0])
      
      • 1

      信息

      ID
      1556
      时间
      1000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      22
      已通过
      11
      上传者