3.病人排队

news2024/11/20 20:36:49

【题目】

病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:

老年人(年龄 >= 60岁)比非老年人优先看病。
老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
非老年人按登记的先后顺序看病。

【输入格式】

第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同,且只包含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。

【输出格式】

按排好的看病顺序输出病人的ID,每行一个。

【样例】

样例输入

5

021075 40

004003 15

010158 67

021033 75

102012 30

样例输出

021033

010158

021075

004003

102012


【思路】

1. 先把输入的数据,按照年龄分成两个 LinkedHashMap,一个是年龄大于等于 60岁 的老年人, 一个是非老年人;

2. 对老年人的 LinkedHashMap按照 年龄大小 进行从大到小排序 ;

3. 非老年人的 LinkedHashMap就按照登记顺序(即在数组中的顺序)输出就可以。

【注意】这里需要考虑到排序的 稳定性问题

排序算法的稳定性是指当存在两个相等的元素时,排序后它们的相对位置是否保持不变。

具体来说,如果在排序前,有两个相等的元素 A 和 B,且 A 出现在 B 的前面,那么如果排序算法是稳定的,经过排序后,A 仍然应该出现在 B 的前面。

稳定性对于某些应用场景非常重要。例如,在按照 老年人的年龄 进行排序的情况下,如果有两个 年龄相同 的老人,他们的顺序可能会影响到他们的排名。如果排序算法是稳定的,相同年龄的老人的 相对顺序 将被保留,而这个相对顺序恰好就是 登记的先后顺序

【注意】观察题目的输入

Main函数里面的public static String[] sort(String[] id, int[] age){ return id; }

这个函数的输入是 String[] idint[] age的,也就是说题目已经帮我们把 输入的

5

021075 40

004003 15

010158 67

021033 75

102012 30

转换成了分离的

021075

004003

010158

021033

102012

40

15

67

75

30

所以我们要建立一下 String[] idint[] age 的映射关系,由于可能会存在老年人年龄相同的情况(Key值相同),所以不用二叉搜索树,而是用 Hashmap

【排序算法】

基本的冒泡算法就可以

【踩坑】

在这里插入图片描述
所以要用 Map<String,Integer> map = new LinkedHashMap<>();

另外,由于年龄可能存在相同的情况,所以如果把 age 作为 Map 的 Key 值,会存在相同 Key 值的被覆盖的问题,比如说 有 011111 44, 022222 44 ,后面的022222 44 就会把前面的覆盖掉,因为 Key 值只可能是唯一对应的。

【代码】

import java.util.*;

public class test {
    public static String[] coupons(String[] id, int[] age) {
//     错误写法:   HashMap<Integer, String> map = new HashMap<>();

// 建立一个有序的LinkedHashMap存放所有数据
        Map<String,Integer> map = new LinkedHashMap<>();
        for (int i = 0; i < age.length; i++) {
            map.put(id[i],age[i]);
        }
        System.out.println(map);

// 把数据分成 老年人 map 和 非老年人 map
        Map<String,Integer> oldMap = new LinkedHashMap<>();
        Map<String,Integer> youngMap = new LinkedHashMap<>();
        for (String key : map.keySet()) {
            int value = map.get(key);
            if (value >= 60) {
                oldMap.put(key, value);
            } else {
                youngMap.put(key, value);
            }
        }
        
// 用List把他们包裹起来
        List<Map.Entry<String,Integer>> sortedOldList = new ArrayList<>(oldMap.entrySet());
        List<Map.Entry<String,Integer>> youngList = new ArrayList<>(youngMap.entrySet());
        System.out.println(youngList);
        
 // 对老年人进行按照年龄大小的冒泡排序
        for (int i = 0; i < sortedOldList.size(); i++) {
            for (int j = 0; j < sortedOldList.size() - 1 - i; j++) {
                if (sortedOldList.get(j).getValue() < sortedOldList.get(j + 1).getValue()) {
                    Collections.swap(sortedOldList, j, j + 1);
                }
            }
        }

// 输出
        for (int i = 0; i < sortedOldList.size(); i++) {
            id[i] = sortedOldList.get(i).getKey();
        }
        for (int i = sortedOldList.size(); i < (sortedOldList.size() + youngList.size()); i++) {
            id[i] = youngList.get(i - sortedOldList.size()).getKey();
        }
        return id;
    }

    // APPEND BEGIN
    public static void main(String[] args){
        Scanner reader = new Scanner(System.in);
        int n = reader.nextInt();
        String[] id = new String[n];
        int[] age = new int[n];
        int i = 0;
        while (reader.hasNext()){
            id[i] = reader.next();
            age[i++] = reader.nextInt();
            if (i == age.length) break;
        }
        String[] result = coupons(id,age);
        for (String re : result){
            System.out.println(re);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter Flar动画实战

在Flare动面出现之前,Flare动画大体可以分为使用AnimationController控制的基础动画以及使用Hero的转场动画,如果遇到一些复杂的场景,使用这些动画方案实现起来还是有难度的。不过,随着Flutter开始支持Flare矢量动面,Flutter的动画开发也变得越来越简单。事实上,Flare动画…

leetcode 435. 无重叠区间

2023.8.3 本题和引爆气球 这题非常类似&#xff0c;利用同样的思路可以解决&#xff0c;代码如下&#xff1a; class Solution { public:static bool cmp(vector<int>& a , vector<int>& b){if(a[0] b[0]) return a[1] < b[1];return a[0] < b[0];…

cuda入门demo(2)——最基础的二方向sobel

⚠️主要是自己温习用&#xff0c;只保证代码正确性&#xff0c;不保证讲解的详细性。 今天继续总结cuda最基本的入门demo。很多教程会给你说conv怎么写&#xff0c;实际上sobel也是conv&#xff0c;并且conv本身已经用torch实现了。 之前在课题中尝试了sobel的变体&#xff0…

打造完美美妆体验,化妆品商城软件系统助你一臂之力

化妆品商城软件系统采用先进的前后端分离技术&#xff0c;支持多种语言和数据库&#xff0c;具有良好的扩展性和可维护性。同时&#xff0c;一般系统还提供丰富的功能模块&#xff0c;包括商品管理、订单管理、用户管理、营销推广等&#xff0c;可以满足不同规模的化妆品商城的…

在windows配置redis的一些错误及解决方案

目录 Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException:用客户端Redis Desktop Manager一样的密码端口&#xff0c;是可以正常连接的&#xff0c;但是运行java程序之后使用接口请求就会报错 Unable to connect to Redis; nested e…

关于CPU对Cache的访存操作 浅解

最近在做计算机组成原理关于高速缓存处理器的相关习题&#xff0c;由于一开始没有完全理解导致做题时特别崩溃。在做错无数次题后我感觉自己有必要总结一下自己对Cache的理解&#xff0c;以防以后再忘记。 一 | 前因 1 为什么需要Cache? 首先我们需要明白为什么需要使用Cac…

Unity Shader:闪烁

还是一样的分为UI闪烁和物体闪烁,其中具体可分为:UI闪烁、物体闪烁与半透明闪烁 1,UI闪烁 对于UI 还是一样的,改写UI本身的shader: Shader "UI/YydUIShanShder" {Properties{[PerRendererData] _MainTex("Sprite Texture", 2D) = "white"…

[PM]敏捷开发之Scrum总结

在项目管理中&#xff0c;不少企业和项目团队也发现传统的项目管理模式已不能很好地适应今天的项目环境的要求。因此&#xff0c;敏捷项目管理应运而生&#xff0c;本文将为大家介绍Scrum敏捷项目管理以及应用方法。 什么是Scrum敏捷项目管理 敏捷项目管理作为新兴的项目管理模…

一键生成动漫头像小程序源码-含搭建教程

这款程序用来做小程序矩阵&#xff0c;非常不错&#xff0c;可以把他放到你的其他小程序里&#xff0c;或者其他程序系统来弥补程序的丰富性&#xff0c;拓展可玩性。 很多抖音直播也在玩这个&#xff0c;玩法很简单&#xff0c;可以去参考那些直播间 这款程序没有后台&#xf…

python_PyQt5开发验证K线视觉想法工具V1.2_批量验证

目录 运行情况&#xff1a; ​编辑 结果json文件格式&#xff1a; 代码&#xff1a; 承接 【python_PyQt5开发验证K线视觉想法工具V1.1 _增加标记类型_线段】 博文 地址&#xff1a;python_PyQt5开发验证K线视觉想法工具V1.1 _增加标记类型_线段_程序猿与金融与科技的博客-…

使用node.js 搭建一个简单的HelloWorld Web项目

文档结构 config.ini #将本文件放置于natapp同级目录 程序将读取 [default] 段 #在命令行参数模式如 natapp -authtokenxxx 等相同参数将会覆盖掉此配置 #命令行参数 -config 可以指定任意config.ini文件 [default] authtokencc83c08d73357802 #对应一条隧…

【LeetCode】从中序与后序遍历序列构造二叉树

从中序与后序遍历序列构造二叉树 题目描述算法分析编程代码 链接: 从中序与后序遍历序列构造二叉树 题目描述 算法分析 编程代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : …

Vulnhub靶机DC-2 writeup

靶机介绍 靶机介绍&#xff1a;https : //download.vulnhub.com/dc/DC-2.zip ​ 信息搜集 获取IP地址 扫描靶机的IP的方法 1. nmap -sP 192.168.142.0/24 #nmap进行ping扫描发现存活主机 2. arp-scan -l #基于ARP发现内网存活主机 3. netdiscover -r 192.168.142.0/24 -…

【排序算法】python之冒泡,选择,插入,快速,归并

参考资料&#xff1a; 《Python实现5大排序算法》《六大排序算法&#xff1a;插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序》 --代码似乎是C语言 ———————— 本文介绍5种常见的排序算法和基于Python实现&#xff1a; 冒泡排序&#xff08;Bubble Sort&am…

Vue2 第十七节 Vue中的Ajax

1.Vue脚手架配置代理 2.vue-resource 一.Vue脚手架配置代理 1.1 使用Ajax库 -- axios ① 安装 : npm i axios ② 引入: import axios from axios ③ 使用示例 1.2 解决开发环境Ajax跨域问题 跨域&#xff1a;违背了同源策略&#xff0c;同源策略规定协议名&#xff0…

智能的等价超越了数学的等价

尽管等价关系只是智能的一方面&#xff0c;还有其他一些如语言理解、创造性思维和决策能力等方面都可以作为评估智能的标志。 能否有效产生出等价关系仍然被视为智能出现的最重要标志之一。在认知科学和人工智能领域&#xff0c;智能通常被定义为具备理解、学习、推理和问题解决…

Python系统学习1-3

1、变量 变量&#xff1a;关联一个对象的标识符 学习目标&#xff1a;学会画变量的内存图 命名规则:字母数字下划线&#xff0c;所有单词小写&#xff0c;单词之间下划线隔开 赋值&#xff1a;创建一个变量或改变一个变量关联的数据。 语法&#xff1a;变量名数据&#xf…

【项目流程】前端项目的开发流程

1. 项目中涉及的所有角色及其职责 - PM 产品经理 产品经理&#xff08;Product Manager&#xff0c;简称PM&#xff09;负责明确和定义产品的愿景和战略&#xff0c;与客户、用户、业务部门和其他利益相关者进行沟通&#xff0c;收集并分析他们的需求和期望。负责制定产品的详…

使用FreeMarker导出word文档(支持导出图片)

今天跟大家分享一下工作中比较实用的导出word 带图片的功能。 对于在idea开发中我们需要引入以下依赖&#xff1a; 2.对于eclipse 开发我们需要进入对应的jar包 这个必须放在lib下&#xff0c;同样也需要在当前项目的环境是加入该依赖 需要在MEAT-INF加入 首先制定word 导出…

动画响应卡

html代码: <div class"container"><div class"card" style"--clr: #009688"><div class"img-box"><img src"https://www.jq22.com/newjs/img-01.png"></div><div class"content&quo…