面试题-python3 将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列
面试题
某大厂迎来了新入职的大学生,现在需要为每个新同事分配一个工号。
人力资源部同事小V设计了一个方法为每个人进行排序并分配最终的工号,具体规则是:
将N(N<10000)个人排成一排,从第1个人开始报数;如果报数是M的倍数就出列,报到队尾后则回到对头继续报, 直到所有人都出列;最后按照出列顺序为每个人依次分配工号
报数报到3的退出
100个人围一圈编号1-100,依次开始报数,
从1开始,报到3的退出,然后继续从1开始,报到3退出,直到最后只有2个人,得到编号 58, 91
从1开始,报到4的退出,然后继续从1开始,报到4退出,直到最后只有3个人,得到编号 34, 45, 97
实现效果:
输入:3
输出:58,91
输入:4
输出:34, 45, 97
# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ a = list(range(1, 101)) n = 3 while len(a) >= n: if n-2 >= 0: a = a[n:] + a[:n-1] print(sorted(a))
跟这题非常类似,不同之处是需要收集出列的小伙伴顺序,最后几个小伙伴需继续报数,直到最后一个
先出列
假设20个人,报道5的倍数出列,于是可以得到
# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ a = list(range(1, 21)) new_arry = [] m = 5 # 1.人数大于等于n while len(a) >= m: new_arry.append(a[m-1]) a = a[m:] + a[:m-1] print(a) # 多余的 print(new_arry)
运行结果:
[2, 7, 8, 14] [5, 10, 15, 20, 6, 12, 18, 4, 13, 1, 9, 19, 11, 3, 17, 16]
最后还有4个人将继续报数,
人数小于n的情况
[2,7,8,14]继续循环[2,7,8,14] 此时 2 出列,剩余[7,8,14]
[7,8,14]继续循环[7,8,14],此时 8 出列,剩余[7,14]
[14, 7]继续循环[14,7],此时14出列,剩余[7]
最后一个[7]可以直接取出来了
# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ a = list(range(1, 21)) new_arry = [] m = 5 # 1.人数大于等于n while len(a) >= m: new_arry.append(a[m-1]) a = a[m:] + a[:m-1] print(a) # 多余的 # 2.人数小于n while len(a) < m: # 取a的整数倍余数 m1 = m % len(a) if len(a) >= m1: new_arry.append(a[m1-1]) a = a[m1:] + a[:m1-1] # 最后一个取出来 if len(a) == 1: new_arry.append(a[0]) break print(new_arry)
运行结果
[2, 7, 8, 14] [5, 10, 15, 20, 6, 12, 18, 4, 13, 1, 9, 19, 11, 3, 17, 16, 2, 8, 14, 7]
面试题-python3 100个人围一圈编号1-100,依次开始报数报到3的退出
面试题-python3 按规律写出下一个数1, 11, 21, 1211, 111221
面试题-python3 英文单词全部都是以首字母大写,逐个反转每个单词
面试题-python3 字符串消消乐,将字符串中相邻相同的字符一起消掉
面试题-python3 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组
面试题-python3 找出一个字符串中所有子串是回文的次数
面试题-python3 找出一个字符串中子串,不含有重复字符的最长子串
2021年第七期《python接口自动化+测试开发》课程,4月18号开学(火热报名中!)
本期上课时间:4月18号-7月11号,每周六、周日晚上20:30-22:30