zoukankan      html  css  js  c++  java
  • 面试题-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]
    
  • 相关阅读:
    第八届极客大挑战 Web-php绕过
    第八届极客大挑战 Web-故道白云&Clound的错误
    IMDB-TOP_250-爬虫
    任意角度图片旋转
    图片处理代码
    C#获取获取北京时间多种方法
    STL vector用法介绍
    C++ 用libcurl库进行http通讯网络编程
    CString 使用方法
    A星算法(游戏寻路算法)的C++实现(转)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14784389.html
Copyright © 2011-2022 走看看