OD-能力组队(python)

能力组队

题目描述

用数组代表每个人的能力,
一个比赛活动要求,参赛团队的最低能力值为N
每个团队可以由一人或者两人组成,
且一个人只能参加一个团队,
计算出最多可以派出多少只符合要求的队伍。

输入描述

第一行代表总人数,范围1 ~ 500000
第二行数组代表每个人的能力
数组大小范围1 ~ 500000
元素取值范围1 ~ 500000
第三行数值为团队要求的最低能力值1 ~ 500000

输出描述

最多可以派出的团队数量

示例一

输入

5
3 1 5 7 9
8

输出

3

说明

35组成一队
17一队
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))

代码解读:

  1. 第一行输入数字 m,表示总共有 m 个数字。
  2. 第二行输入 m 个数字,使用空格分隔,使用 map 函数将数字转换为 int 类型,将它们存储在列表 num 中。
  3. 第三行输入数字 n,表示小组数字之和必须大于等于 n。
  4. 第四行将列表 num 按升序排序。
  5. 第五行创建一个空列表 team_num,用于存储小组。
  6. 第六到九行遍历列表 num,将大于等于 n 的数字添加到 team_num 中,并从 num 中删除。
  7. 第十行打印 num 和 team_num,用于检查前半部分的正确性。
  8. 第十一行开始遍历 num 列表中的数字 k。
  9. 第十二行获取 k 在列表 num 中的索引 num_index。
  10. 第十三行将 j 赋值为 num_index + 1,表示从 k 后面的数字开始搜索可以组成小组的数字。
  11. 第十四到二十行开始内层循环,将 k 和后续的数字一一相加,判断它们是否大于等于 n。
  12. 第十五行如果相加结果大于等于 n,则将这两个数字组成一个小组,将它添加到 team_num 中,并从 num 列表中删除这个数字。
  13. 第十七行如果相加结果小于 n,则继续遍历 num 列表的下一个数字。
  14. 第二十一行外层循环结束后,打印小组的个数(即 team_num 的长度)并退出。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值