Python的排列组合运用

有下面一道编程的题目,如果用其他语言确实有点难办,但是用Python,呵呵!

写程序帮李老师把2组学生配对。有两组学生,A组跟B组。每个学生有自己的分数,分数为1到100的整数。一个A组的学生能跟一个B组的学生配成一对,条件是两个学生分数差别不能超过某非负整数k。每一对包含一个A组的学生跟一个B组的学生。每个学生只能参与一对不能参与多对。程序需要从标准输入(stdin)读问题数据,包括3行。第一行有3个整数,第一是k,第二是A组的人数,第三是B组的人数。第二第三行分别是A组B组学生的分数,空各字符为定界符。答案为最多能配对的数量。程序需要把答案写到标准输出(stdout)。


【源码实现】

#!/usr/bin/python
#coding:utf8

import itertools

s_line1 = input()
s_line2 = input()
s_line3 = input()
l_line1 = s_line1.split(" ")
l_line2 = s_line2.split(" ")
l_line3 = s_line3.split(" ")
#第一行参数
k = int(l_line1[0])
a_num = int(l_line1[1])
b_num = int(l_line1[2])
#第二行参数
a_scores = [int(i) for i in l_line2]
#第三行参数
b_scores = [int(i) for i in l_line3]

min_ab = []
max_ab = []
min_ab_num = min(len(a_scores), len(a_scores))

if len(a_scores) == min_ab_num:
    min_ab = a_scores
    max_ab = b_scores
else:
    min_ab = b_scores
    max_ab = a_scores

fit_num = 0
for i in itertools.permutations(max_ab, min_ab_num):
    fit_num = max(fit_num, len(list(filter(lambda x:x<=k, list(map(lambda x,y:abs(x-y), min_ab, list(i)))))))
print(fit_num)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值