能力组队
题目描述
用数组代表每个人的能力,
一个比赛活动要求,参赛团队的最低能力值为N
每个团队可以由一人或者两人组成,
且一个人只能参加一个团队,
计算出最多可以派出多少只符合要求的队伍。
输入描述
第一行代表总人数,范围1 ~ 500000
第二行数组代表每个人的能力
数组大小范围1 ~ 500000
元素取值范围1 ~ 500000
第三行数值为团队要求的最低能力值1 ~ 500000
输出描述
最多可以派出的团队数量
示例一
输入
5
3 1 5 7 9
8
输出
3
说明
3
、5
组成一队1
、7
一队9
自己一队
输出3
示例二
输入
7
3 1 5 7 9 2 6
8
输出
4
¶参考解题 python
# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/30
Time: 20:52
Author: kang
enp:
7
3 1 5 7 9 2 6
8
"""
m = int(input())
num = list(map(int, input().split()))
n = int(input())
num.sort()
team_num = []
for i in range(m):
if num[i] >= n:
team_num.append(num[i])
num.remove(num[i])
print(num,team_num)
for k in num:
num_index = num.index(k)
j = num_index + 1
while j < len(num):
if num[j] + k >= n:
team_num += [(k, num[j])]
num.pop(j)
else:
j += 1
print(len(team_num))
代码解读:
- 第一行输入数字 m,表示总共有 m 个数字。
- 第二行输入 m 个数字,使用空格分隔,使用 map 函数将数字转换为 int 类型,将它们存储在列表 num 中。
- 第三行输入数字 n,表示小组数字之和必须大于等于 n。
- 第四行将列表 num 按升序排序。
- 第五行创建一个空列表 team_num,用于存储小组。
- 第六到九行遍历列表 num,将大于等于 n 的数字添加到 team_num 中,并从 num 中删除。
- 第十行打印 num 和 team_num,用于检查前半部分的正确性。
- 第十一行开始遍历 num 列表中的数字 k。
- 第十二行获取 k 在列表 num 中的索引 num_index。
- 第十三行将 j 赋值为 num_index + 1,表示从 k 后面的数字开始搜索可以组成小组的数字。
- 第十四到二十行开始内层循环,将 k 和后续的数字一一相加,判断它们是否大于等于 n。
- 第十五行如果相加结果大于等于 n,则将这两个数字组成一个小组,将它添加到 team_num 中,并从 num 列表中删除这个数字。
- 第十七行如果相加结果小于 n,则继续遍历 num 列表的下一个数字。
- 第二十一行外层循环结束后,打印小组的个数(即 team_num 的长度)并退出。