今年7月份vivo迎来了新入职的大学生,现在需要为每个新同事分配一个工号。人力资源部同事小v设计了一个方法为每个人进行排序并分配最终的工号,具体规则是:
将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到队头继续报,直到所有人都出列;
最后按照出列顺序为每个人依次分配工号。请你使用自己擅长的编程语言帮助小v实现此方法。
将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到队头继续报,直到所有人都出列;
输入2个正整数,空格分隔,第一个代表人数N,第二个代表M:
输出一个int数组,每个数据表示原来在队列中的位置用空格隔开,表示出列顺序:
6 3
3 6 4 2 5 1
6个人排成一排,原始位置编号即为1-6。最终输出3 6 4 2 5 1表示的是原来编号为3的第一个出列,编号为1的最后一个出列。
def solution(N,M): li = list(map(int, range(1, N + 1))) sub = li k = 0 while sub: li = [] for i in range(len(sub)): k += 1 if k % M == 0: print(sub[i], end=' ') # 满足条件就输出 else: li.append(sub[i]) # 不满足就加进新的列表 sub = li # 最后将新的列表赋值,再进行循环 pass N,M = [int(i) for i in input().split()] solution(N,M)
def solution(N,M): if N < 1&nbs***bsp;M < 1: return a = [i for i in range(1,N+1)] count = 1 res = [] while a: temp = [] for i in a: if count%M != 0: temp.append(i) else: res.append(i) count += 1 a = temp print(" ".join(map(str,res))) return N,M = [int(i) for i in input().split()] solution(N,M)