(B卷,100分)- 拔河比赛(Java & JS & Python & C)

题目描述

公司最近准备进行拔河比赛,需要在全部员工中进行挑选。
选拔的规则如下:

  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

用例

输入 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
说明

题目解析

考察简单的排序。


2023.09.21

本题根据考友反馈,题目用例的输出格式可能存在问题

考试时可以考虑将多行输出 改成 一行输出 试试

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const employees = [];

  while (true) {
    try {
      employees.push((await readline()).split(" ").map(Number));
    } catch (error) {
      break;
    }
  }

  getResult(employees);
})();

function getResult(employees) {
  employees.sort((a, b) => (a[0] != b[0] ? b[0] - a[0] : b[1] - a[1]));

  for (let i = 0; i < 10; i++) {
    console.log(employees[i].join(" "));
  }
}

Java算法源码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
  static class Employee {
    int height;
    int weight;

    public Employee(String s) {
      int[] tmp = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray();
      this.height = tmp[0];
      this.weight = tmp[1];
    }

    @Override
    public String toString() {
      return this.height + " " + this.weight;
    }
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    ArrayList<Employee> employees = new ArrayList<>();

    // 假设题目以空行作为输入结束条件
    //    while (sc.hasNextLine()) {
    //      String line = sc.nextLine();
    //
    //      if ("".equals(line)) {
    //        getResult(employees);
    //        break;
    //      } else {
    //        employees.add(new Employee(line));
    //      }
    //    }

    // 没有额外的空行作为输入结束条件
    while (sc.hasNextLine()) {
      employees.add(new Employee(sc.nextLine()));
    }

    getResult(employees);
  }

  public static void getResult(ArrayList<Employee> employees) {
    employees.sort((a, b) -> a.height != b.height ? b.height - a.height : b.weight - a.weight);

    for (int i = 0; i < 10; i++) {
      System.out.println(employees.get(i));
    }
  }
}

Python算法源码

# 全局变量
employees = []

# 输入获取
while True:
    try:
        employees.append(list(map(int, input().split())))
    except:
        break


# 算法入口
def getResult(employees):
    employees.sort(key=lambda x: (-x[0], -x[1]))

    for i in range(10):
        print(" ".join(map(str, employees[i])))


# 算法调用
getResult(employees)

C算法源码

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef struct {
    int height;
    int weight;
} Employee;

int cmp(const void *a, const void *b) {
    Employee* A = (Employee*) a;
    Employee* B = (Employee*) b;
    return A->height != B->height ? B->height - A->height : B->weight - A->weight;
}

int main() {
    Employee employees[MAX_SIZE];
    int employees_size = 0;

    int height, weight;
    while(scanf("%d %d", &height, &weight) != EOF) {
        employees[employees_size].height = height;
        employees[employees_size].weight = weight;
        employees_size++;
    }

    qsort(employees, employees_size, sizeof(Employee), cmp);

    for(int i=0; i<10; i++) {
        printf("%d %dn", employees[i].height, employees[i].weight);
    }

    return 0;
}

 

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?