import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Main {private static BufferedReader input;   // 输入流private static int totalPeople;           // 总人数private static int totalRows;         // 总行数private static BufferedReader getBufferedReader() {// 获取输入流InputStreamReader isr = new InputStreamReader(System.in);return new BufferedReader(isr);}private static void setTotalNumber() throws Exception {// 设置总人数和总排数String str = input.readLine();String[] arr = str.split(" ");totalPeople = Integer.parseInt(arr[0]);  // 总人数totalRows = Integer.parseInt(arr[1]);    // 总排数}private static People[] getPeople() throws Exception {// 获取所有人的信息People[] people = new People[totalPeople];// 保存所有人for (int i = 0; i < totalPeople; ++i) {people[i] = new People();String str = input.readLine();   // 读取一行信息String[] arr = str.split(" ");people[i].setName(arr[0]);        // 设置姓名int height = Integer.parseInt(arr[1]);people[i].setHeight(height);  // 设置身高}return people;                      // 返回所有人}private static void outputFormation(People[] people) {// 输出队形int rowNumber = totalPeople / totalRows;// 每排的人数int from = 0;// 每排的起始下标(闭),默认为最后一排的起始下标// 每排的结束下标(开),默认为最后一排的结束下标int to = rowNumber + totalPeople % totalRows;for (int i = 0; i < totalRows; ++i) {// 所有排List<People> row = getRowsPeople(people, from, to);// 获取一排的人outputRow(row);       // 输出这一排的人的姓名from = to;            // 下一排的起始下标to += rowNumber;   // 下一排的结束下标}}private static List<People> getRowsPeople(   People[] people, // 所有人int from, // 起始下标(闭)int to) {// 结束下标(开)int length = to - from;// 这一排的人数List<People> row = new ArrayList<People>(length);// 初始化长度为length的列表boolean dir = true;// 插入列表的方向,true表示在末尾插入for (int i = from; i < to; ++i) {if (dir) {row.add(people[i]);        // 列表末尾插入dir = false;          // 改变方向为首部插入} else {row.add(0, people[i]);  // 列表首部插入dir = true;               // 改变方向为末尾插入}}return row;// 返回这一排的人}private static void outputRow(List<People> row) {// 输出row这一排的人int length = row.size();for (int i = 0; i < length; ++i) {if (i > 0) {System.out.print(" ");// 不是第一个人,前面输出空格}People people = row.get(i);String name = people.getName();System.out.print(name);}System.out.println();}public static void main(String[] args) throws Exception {input = getBufferedReader();    // 获取输入流setTotalNumber();               // 设置总人数和总排数People[] people = getPeople(); // 获取所有人Arrays.sort(people);            // 排序outputFormation(people);       // 输出队形}
}class People implements Comparable<People> {// 人private String name; // 姓名private int height;        // 身高public String getName() {          // 获取姓名return name;}public void setName(String name) {  // 设置姓名this.name = name;}public int getHeight() {          // 获取身高return height;}public void setHeight(int height) {   // 设置身高this.height = height;}@Overridepublic int compareTo(People o) {int anotherHeight = o.getHeight(); // 别人的身高if (height != anotherHeight) {     // 身高不等return anotherHeight - height;   // 身高降序}String anotherName = o.getName();  // 别人的姓名return name.compareTo(anotherName); // 姓名字典序升序}
}

PAT_B_1055_Java(25分)相关推荐

  1. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  2. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  3. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  4. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  5. 【PAT (Advanced Level) Practice】1093 Count PAT‘s (25 分)

    1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...

  6. 【PAT (Advanced Level) Practice】1149 Dangerous Goods Packaging (25 分)

    1149 Dangerous Goods Packaging (25 分) When shipping goods with containers, we have to be careful not ...

  7. 7-29 修理牧场 (25 分)

    7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L ​i ​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  8. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  9. 5-35 城市间紧急救援 (25分) pat 数据结构

    题目连接 https://pta.patest.cn/pta/test/15/exam/4/question/862 5-35 城市间紧急救援   (25分) 作为一个城市的应急救援队伍的负责人,你有 ...

最新文章

  1. ubuntu下快速安装adb,fastboot的方法。
  2. 中职计算机说课稿三篇,2020精选中职计算机说课稿3篇(15页)-原创力文档
  3. 电子元器件首饰!送给你喜欢的女孩!
  4. linux qt程序编译出错,QTcreator编译出错
  5. Linux下实现Raid 5软阵列
  6. SQL Server判断对象是否存在 (if exists (select * from sysobjects )
  7. ofo 回应假装老外秒退押金;董明珠雷军十亿赌约到期;高通苹果摩擦再升级 | 极客头条...
  8. 关于PHOTO SHOP CS9.0无法启动adobe updater 请重新安装应用程序和组件解决方法!
  9. eclipse远程发布代码的方法(SSH自动同步)
  10. 如何查看各类期刊的影响因子
  11. 游戏拳皇命运服务器维护,拳皇命运
  12. 三国演义中的十大谎言 VS 程序员十大口头禅
  13. 数据库查数据 索引
  14. 在html中什么标签可以显示小方块,css列表前的小方块
  15. 微pe工具箱+软碟通 制作 U盘启动盘
  16. 如何创建数据链接文件
  17. 我不需要保险,全家都不需要
  18. 【Matlab学习手记】sym8小波滤波
  19. 删除字符串中所有的空格
  20. python例程:AI智能联系人管理的程序

热门文章

  1. spring 点击保存按钮页面禁用_用一篇深度好文,详解按钮的设计
  2. python包怎么用_python的包怎么应用
  3. 使用apache配置基于IP地址的虚拟主机
  4. 王小云计算机,王小云学者主页-科技工作者之家
  5. 用Python实现一个SVM分类器策略
  6. 课堂作业:返回一个二维整数组中最大子数组的和
  7. 【技术人快报】美军计划换用Linux系统+安卓系统“克隆漏洞”曝光
  8. Atitti dbutil获取多个返回结果集的解决
  9. VMM系列之添加Hyper-V群集主机到VMM服务器
  10. USACO Section 4.2 题解