朋友遇到一个面试题,让我帮忙实现,题目如下:

红队有A1,B1,C1三名队员,蓝队有A2,B2,C2三名队员,每轮比赛各队出一名队员参加,一名队员只能参加一次比赛,假设A1不会和B2打,B1不会和B2和C2打,那么可能出现的组合情况是什么?

这个面试题的难点在于如何算出所有可能的组合,考虑扩展性的话,还得考虑两队人数不相同的问题,因此有了下面代码:

  1. # coding: utf-8
  2. import copy
  3.  
  4. def get_team_group_list(team1, team2):
  5. if len(team1) == 1 or len(team2) == 1:
  6. team_group_list = list()
  7. for user1 in team1:
  8. for user2 in team2:
  9. user_group = {
  10. "U1": user1,
  11. "U2": user2
  12. }
  13. user_group_list = [user_group]
  14. team_group_list.append(user_group_list)
  15. return team_group_list
  16. else:
  17. sub_team1 = team1[1:]
  18. user1 = team1[0]
  19. team_group_list = list()
  20. for user2 in team2:
  21. sub_team2 = filter(lambda x: x != user2, team2)
  22. sub_team_group_list = get_team_group_list(sub_team1, sub_team2)
  23. for user_group_list in sub_team_group_list:
  24. tmp_user_group_list = copy.deepcopy(user_group_list)
  25. user_group = {
  26. "U1": user1,
  27. "U2": user2
  28. }
  29. tmp_user_group_list.append(user_group)
  30. team_group_list.append(tmp_user_group_list)
  31. return team_group_list
  32.  
  33. def test():
  34. team1 = ["A1", "B1", "C1"]
  35. team2 = ["A2", "B2", "C2"]
  36. exclude_condition_list = [
  37. {
  38. "U1": "A1",
  39. "U2": "B2"
  40. },
  41. {
  42. "U1": "B1",
  43. "U2": "B2"
  44. },
  45. {
  46. "U1": "B1",
  47. "U2": "C2"
  48. }
  49.  
  50. ]
  51. team_group_list = get_team_group_list(team1, team2)
  52. for num in range(0, len(team_group_list)):
  53. print("肯能组合{0}:".format(num))
  54. print(team_group_list[num])
  55. for num in range(0, len(team_group_list)):
  56. is_valid = True
  57. team_group = team_group_list[num]
  58. for exclude_condition in exclude_condition_list:
  59. match_list = filter(lambda user_group:
  60. (
  61. user_group["U1"] == exclude_condition["U1"] and
  62. user_group["U2"] == exclude_condition["U2"]
  63. ),
  64. team_group)
  65. if len(match_list) > 0:
  66. is_valid = False
  67. if is_valid:
  68. print("组合{0}满足条件:".format(num))
  69. print(team_group_list[num])
  70.  
  71. test()

显示效果为:

  1. 肯能组合0:
  2. [{'U1': 'C1', 'U2': 'C2'}, {'U1': 'B1', 'U2': 'B2'}, {'U1': 'A1', 'U2': 'A2'}]
  3. 肯能组合1:
  4. [{'U1': 'C1', 'U2': 'B2'}, {'U1': 'B1', 'U2': 'C2'}, {'U1': 'A1', 'U2': 'A2'}]
  5. 肯能组合2:
  6. [{'U1': 'C1', 'U2': 'C2'}, {'U1': 'B1', 'U2': 'A2'}, {'U1': 'A1', 'U2': 'B2'}]
  7. 肯能组合3:
  8. [{'U1': 'C1', 'U2': 'A2'}, {'U1': 'B1', 'U2': 'C2'}, {'U1': 'A1', 'U2': 'B2'}]
  9. 肯能组合4:
  10. [{'U1': 'C1', 'U2': 'B2'}, {'U1': 'B1', 'U2': 'A2'}, {'U1': 'A1', 'U2': 'C2'}]
  11. 肯能组合5:
  12. [{'U1': 'C1', 'U2': 'A2'}, {'U1': 'B1', 'U2': 'B2'}, {'U1': 'A1', 'U2': 'C2'}]
  13. 组合4 满足条件:
  14. [{'U1': 'C1', 'U2': 'B2'}, {'U1': 'B1', 'U2': 'A2'}, {'U1': 'A1', 'U2': 'C2'}]

通过递归方式来解决

===================================================

其实啥都是虚的,你们都是来看妹子的,是不是!!!

python--求参赛两队所有可能的比赛组合情况的更多相关文章

  1. python中对两个 list 求交集,并集和差集

    python中对两个 list 求交集,并集和差集: 1.首先是较为浅白的做法: >>> a=[1,2,3,4,5,6,7,8,9,10] >>> b=[1,2,3 ...

  2. Python 求两个文本文件以行为单位的交集 并集 差集

    Python 求两个文本文件以行为单位的交集 并集 差集,来代码: s1 = set(open('a.txt','r').readlines()) s2 = set(open('b.txt','r') ...

  3. Python 求点到直线的垂足

    Python 求点到直线的垂足 在已知一个点,和一条已知两个点的直线的情况下 运算公式参考链接:https://www.cnblogs.com/mazhenyu/p/3508735.html def ...

  4. 使用python求字符串或文件的MD5

    使用python求字符串或文件的MD5 五月 21st, 2008 #以下可在python3000运行. #字符串md5,用你的字符串代替'字符串'中的内容. import hashlib md5=h ...

  5. python求微分方程组的数值解曲线01

    本人最近在写一篇关于神经网络同步的文章,其一部分模型为: x_i^{\Delta}(t)= -a_i*x_i(t)+ b_i* f(x_i(t))+ \sum\limits_{j \in\{i-1, ...

  6. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    2018年3月19日 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5 ...

  7. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  8. 执行python解释器的两种方式

    执行python解释器的两种方式 1.交互式 python是高级语言,是解释型语言,逐行翻译,写一句翻译一句 print ('hello world') 2.命令行式 python和python解释器 ...

  9. 比较python类的两个instance(对象) 是否相等

    http://www.yihaomen.com/article/python/281.htm 比较python类的两个instance(对象) 是否相等 作者:轻舞肥羊 日期:2012-10-25 字 ...

随机推荐

  1. [Robot Framework] Jenkins上调用Rebot命令时执行报错不往下执行其他命令

    在配置jenkins job时,添加构建步骤Execute Windows batch command,输入执行rebot命令 报错信息: Call C:\Python27\Scripts\rebot ...

  2. activemq , redis

    activemq是干什么的?即时消息通信,简单说: A发送消息给activemq 服务,B监听服务获取消息.假如有如下场景: A发送了一个请求,但是这个请求需要做 10 项工作,如果按照正常操作,需要 ...

  3. 导入mysql报错问题

    今天数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max ...

  4. python之面向对象篇6

    一.继承与派生 什么是继承 继承一种新建类的方式,新建的类称为子类或者派生类,被继承的类称为父类或基类或超类 子类会遗传父类的一系列属性 python支持多继承 注意: 在python3中,如果没有显 ...

  5. 代理设计模式 (静态代理设计模式)+ 动态代理(JDK和Cglib)

    一.代理设计模式 1.设计模式:前人总结一套解决特定问题的代码 2.代理设计模式优点: 2.1 保护真实对象 2.2 让真实对象职责更明确 2.3 扩展 3.代理设计模式 3.1 真实对象(老总) 3 ...

  6. 多项式相关&&生成函数相关&&一些题目(updating...)

    文章目录 多项式的运算 多项式的加减法,数乘 多项式乘法 多项式求逆 多项式求导 多项式积分 多项式取对 多项式取exp 多项式开方 多项式的除法/取模 分治FFT 生成函数 相关题目 多项式的运算 ...

  7. mysql 在linux下的完整安装过程

    1.下载RPM包 https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar 2.先使用命令删 ...

  8. pytorch总结

    PyTorch 深度学习:60分钟快速入门 用例子学习 PyTorch 手把手教你用PyTorch从零搭建图像分类模型

  9. mysql mybatis useGeneratedKeys Field 'ID' doesn't have a default value的问题

    原因是:创建表时没有让id自动增长: CREATE TABLE `STORAGE_VIRTUAL` ( `ID` ) NOT NULL AUTO_INCREMENT, `STORAGE_ID` ) N ...

  10. openstack查看命令的restful调用形式

    [root@cc10 fast-pulsar2]# [root@cc10 fast-pulsar2]# cinder --debug type-create hzb DEBUG:keystonecli ...