全国服务热线:400-6136-679

位置:南通童程童美少儿编程培训学校 > 学校动态 > NOIP 救济金发放顺序

NOIP 救济金发放顺序

来源:南通童程童美少儿编程培训学校时间:2020/3/30 14:06:48

  看下题:

  n个人站成一圈(n<20),逆时针编号为1~n.有两个官员,A从0逆时针数,B从n开始顺时针数.在每一轮中,官员A数k个就停下来,官员B数m个就停下来(注意有可能两个官员在同一个人上)。接下来被官员选中的人(1或2人)离开队伍.

  输入n,k,m输出每轮里被选中的人的编号(如果有两个人,先输出被A选中的)。

  例如,n=10,k=4,m=3

  输出为4 8,9 5,3 1,2 6,10,7.注意:每轮输出的数应当恰好占3列.

  [样例运行结果如图]

  [代码]

  def go(nlist, p, d, t):

  # p from 0 to leng-1

  # d = 1 or -1

  np = p

  leng = len(nlist)

  idlist =[]

  for _ in range(t):

  while True:

  if nlist[np]>0:

  idlist.append(np)

  break

  else:

  np = (np + d + leng) % leng # np 递增或递减, 并循环

  np = (np + d + leng) % leng

  return idlist[-1]

  def main():

  ans=[]

  nkm = input("Please input n k m:")

  nkm = [x.strip() for x in nkm.split()]

  while True:

  try:

  n,k,m = [int(x) for x in nkm]

  break

  except:

  print("Try again: input n k m:")

  nlist = list(range(1,n+1))

  left = n

  pa = 0 #A官员的逆时针起点

  pb = n-1 #B官员的顺时针起点

  while left:

  pa = go(nlist, pa, 1, k)

  pb = go(nlist, pb, -1, m)

  if pa==pb:

  print("{}".format(nlist[pa]), end="")

  nlist[pa]=0

  left-=1

  else:

  print("{} {}".format(nlist[pa], nlist[pb]), end="")

  nlist[pa], nlist[pb] = 0,0

  left -= 2

  if left>0:

  print(",", end="")

  print()

  # print(nlist)

  if __name__=="__main__":

  main()

  好的,就到这里吧。

      无锡童程童美少儿编程培训学校学习资源比较齐全,课程体系丰富,拥有来自外名企、名校的师资教研团队,17年编程教育经验沉淀,累计研发超5000课时,打造了适合中国孩子各年龄段的编程课堂。速来加入童程童美,让孩子离伟大更近一步!

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/2498/news/170246/违者必究! 以上就是南通童程童美少儿编程培训学校 小编为您整理 NOIP 救济金发放顺序的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6136-679