zoukankan      html  css  js  c++  java
  • 谁去开会?


    本系列文章由 @yhl_leo 出品,转载请注明出处。
    文章链接: http://blog.csdn.net/yhl_leo/article/details/50912208


    学院要召开第xxx届研究生学生代表大会,各个班级需要选举出代表。对于各班的代表基本要求,巴拉巴拉一大堆,这里就不列举了,其中有一条数量规定是这样:

    班委、党支部委员和团支部委员选出代表4名,其他班级成员代表6名。

    我们来使用python随机方法选举产生,首先,指定班干部以及班级成员名单(这里都用代号):

    # python3
    
    # 班委
    class_committees = ['A', 'D', 'E', 'K', 'N', 
                       'V', 'W', 'Z']
    # 所有班级成员
    class_member_list = ['A', 'B', 'C', 'D', 'E',
                       'F', 'G', 'H', 'I', 'G',
                       'H', 'I', 'J', 'K', 'L',
                       'M', 'N', 'O', 'P', 'Q',
                       'R', 'S', 'T', 'U', 'V',
                       'W', 'X', 'Y', 'Z']

    没有其他任何多余约定的情况下,当然可以直接随机选举,random模块可以轻松解决:

    import random
    
    COUNT_COMMITTEES = 4
    COUNT_COMMON_MEMBER = 6
    
    print(random.sample(set(class_committees), COUNT_COMMITTEES))
    print(random.sample(set(class_member_list) - set(class_committees), COUNT_COMMON_MEMBER ))

    这样就可以得到一组符合要求的名单(随机算法,每次运行结果都不一样,我们只取第一运行的结果):

    ['N', 'V', 'D', 'K']
    ['P', 'M', 'B', 'S', 'R', 'T']

    为了增加趣味以及坑害无辜善良的同志们,班长觉得加入抢红包环节,红包口令就是赤裸裸的“我要去”,两种方案:

    • 发10个红包,抢得红包者,作为初选者
    • 发(班级人数-10)个红包,没抢得者,作为初选者

    很明显,如果大家已经知情的情况下,后者更能调动大家的积极性,但是风险也是有的,抢红包都不积极,对于这种活动一般也不会积极。

    我们现在选择前者,得到了抢到红包的10个人:

    ['V', 'W', 'R', 'H', 'I', 'P', 'J', 'U', 'M', 'S']

    事事不如意十有八九,此时,并不一定刚好满足班委4人,其成员6人的要求,那就随机调整一下吧:

    red_packets = ['V', 'W', 'R', 'H', 'I', 'P', 'J', 'U', 'M', 'S']
    common_member = set(class_member_list) - set(class_committees);     # 除班级委员之外的同学
    
    committees_packets = set(class_committees) & set(red_packets) # 抢红包的班委
    common_member_packets = set(common_member) & set(red_packets) # 抢红包的其他同学
    print(committees_packets, '
    ', common_member_packets, '
    ')
    
    
    count_cp = len(committees_packets)
    if (count_cp < COUNT_COMMITTEES):
        committees_final_list = committees_packets | set(random.sample(set(class_committees) - committees_packets, COUNT_COMMITTEES - count_cp))
        member_final_list = set(random.sample(common_member_packets, COUNT_COMMON_MEMBER))
        print(committees_final_list, '
    ', member_final_list)
    else:
        committees_final_list = random.sample(committees_packets, COUNT_COMMITTEES)
        member_final_list = common_member_packets | set(random.sample(common_member - common_member_packets, count_cp - COUNT_COMMON_MEMBER))
        print(committees_final_list, '
    ', member_final_list)

    选取编译执行的一组结果:

    {'V', 'W'} 
     {'R', 'U', 'I', 'H', 'M', 'P', 'J', 'S'} 
    
    {'V', 'W', 'K', 'D'} 
     {'U', 'I', 'H', 'M', 'P', 'S'}

    源自:本人个人博客网站yhl’s blog

  • 相关阅读:
    Educational Codeforces Round 64(ECR64)
    [网络流]BZOJ4657 tower 最小割约束
    009:JSON
    008:数据类型
    007:MySQL SSL
    006:多实例安装
    005: 存储引擎介绍
    004:MySQL数据库体系结构
    003:MySQL账号创建授权以及Workbench
    002:MySQL升级以及访问连接
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332144.html
Copyright © 2011-2022 走看看