【算法】拔河比赛

一、题目描述
公司最近准备进行拔河比赛,需要在全部员工中进行挑选选拔的规则如下:
1.按照身高优先、体重次优先的方式准备比赛阵容
2.规定参赛的队伍派出10名选手
请实现一个选拔队员的小程序。
输入为一个数组,记录了部门人员的身高、体重信息,如[身高,体重的方式放置;部门全部成员数量为大于10的一个数组要求输出一个size为10的二维数组,
输入描述
输入为N行员工信息,表示部门报名参加选拔的候选人信息,每行有两个数字,使用空格分隔,表示员工的身高、体重信息
如
181 70
182 70
表示两位候选员工,第一人身高181厘米,体重70公斤;第二人身高182厘米,体重70公斤
输出描述
要求输出一个10行的已经排序的参赛员工信息数据,每行有两个数字,使用空格分隔,表示员工的身高、体重信息如
182 70
181 70
备注输入数据范围
成员身高、体重为int数据类型
输入备选成员数量为N,10 < N 100
示例1:
输入
181 70
182 70
183 70
184 70
185 70
186 70
180 71
180 72
180 73
180 74
180 75
输出
186 70
185 70
184 70
183 70
182 70
181 70
180 75
180 74
180 73
180 72
二、解析思路
解析
这个题看着蛮难的,但是只要数据结构定义好了,其实做起来也蛮简单的
其实就是一个List 集合内装入一个实体类 这个实体类记录了选手的基本信息
给集合进行排序即可。
三、代码实现
public class TugOfWarCompetition {

    static class Person {
        private int height; // 身高

        private int weight; // 体重

        public Person(int h, int w) {
            this.height = h;
            this.weight = w;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Person> persons = new ArrayList<>();
        while (scanner.hasNextLine()) {
            String line  = scanner.nextLine();
            if (line == null || line.equals("")) {
                break;
            }
            Person person = new Person(Integer.parseInt(line.split(" ")[0]),
                    Integer.parseInt(line.split(" ")[1]));
            persons.add(person);
        }
        persons.sort((p1, p2) -> p1.height != p2.height ? p2.height - p1.height : p2.weight - p1.weight);
        for (int i = 0; i < 10; i++) {
            Person p = persons.get(i);
            System.out.println(p.height + " " + p.weight);
        }
    }
}
四、运行结果

D:\javatools\jdk8\bin\java.exe ...
181 70
182 70
183 70
184 70
185 70
186 70
180 71
180 72
180 73
180 74
180 75

186 70
185 70
184 70
183 70
182 70
181 70
180 75
180 74
180 73
180 72

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值