当前位置: 高中信息技术 / 综合题
  • 1. (2023高二下·北仑开学考) 报数游戏。已知班上有n名学生(用编号1,2,3,„,n分别表示),学生按照编号由小到大顺时针围成一个圆圈,从编号为1的学生开始顺时针报数,报到m的同学出列;下一名同学又从1开始报数,报数为m的同学继续出列;以此规律重复下去,直到剩下最后一位同学为止。

    1. (1) 当n=10,m=3时,最后留下的同学的编号是
    2. (2) 下列代码通过构造一个循环单向链表,模拟报数的过程,逐一删除报数为m的节点,直到剩下一个节点为止。请在划线处填入合适的代码。

      n=int(input("n="))

      m=int(input("m="))

      lst=[]

      for i in range(n-1):

          lst.append([i+1,i+1])

      lst.append( ) #将尾节点的指针指向头节点,构成循环单向链表

      p=len(lst)-1

      while n>1:

          for i in range(1,m):         #从1~(m-1)依次报数    

             

          out=lst[p][1]

         

          n=n-1

      print("最后留下的同学的编号是:", lst[p][0])

    3. (3) 下列代码通过构造一个循环队列,模拟报数的过程,将报数为m的元素进行出队操作(报数非m的元素重新入队),直到剩下一个元素为止。请在划线处填入合适的代码。

      n=int(input("n="))

      m=int(input("m="))

      q=[0]*n ; head=0 ; tail=0

      for i in range(1,n+1):         #构造循环队列

          q[tail]=i

         

      c=0

      while (head+1)%n!=tail:

          c=c+1

          if c==m:

              head=(head+1)%n

             

          else:

             

              tail=(tail+1)%n

              head=(head+1)%n

      print("最后留下的同学的编号是: ",q[head])

微信扫码预览、分享更方便