PTA 奥运排行榜(java)
看网上这道题用java写的几乎没有,就分享一下自己的写法
输入格式:
输入的第一行给出两个正整数N和M(≤224,因为世界上共有224个国家和地区),分别是参与排名的国家和地区的总个数、以及前来咨询的国家的个数。为简单起见,我们把国家从0 ~ N−1编号。之后有N行输入,第i行给出编号为i−1的国家的金牌数、奖牌数、国民人口数(单位为百万),数字均为[0,1000]区间内的整数,用空格分隔。最后面一行给出M个前来咨询的国家的编号,用空格分隔。
输出格式:
在一行里顺序输出前来咨询的国家的排名:计算方式编号
。其排名按照对该国家最有利的方式计算;计算方式编号为:金牌榜=1,奖牌榜=2,国民人均金牌榜=3,国民人均奖牌榜=4。输出间以空格分隔,输出结尾不能有多余空格。若某国在不同排名方式下有相同名次,则输出编号最小的计算方式。
思路:这道题我就是直接调用JAVA容器的API实现,注意一个很细节的点就是,如果两个国家计算排名的数值参数是相等的那么它的排名是并列的,举个例子:1(5个金牌)2(5个金牌)3(3个金牌)三个人如果按金牌数量来排名的话,则1,2都是第一名,3是第三名。这个点很容易忽略。
AC代码如下:
import java.util.*;
public class ptaOlympicGames {public static LinkedHashMap<Integer,Person>hm=new LinkedHashMap<>();//key是国家的编号,value是构造的Person类public static ArrayList<Map.Entry<Integer,Person>>s1=new ArrayList<>();//完成最后的操作public static void main(String[] args) {Scanner sc=new Scanner(System.in);ArrayList<Integer>a=new ArrayList<>();//用来存储要来咨询的国家编号int n=sc.nextInt();int m=sc.nextInt();for(int i=0;i<n;i++){hm.put(i, new Person(sc.nextInt(),sc.nextInt(),sc.nextInt()));}for(int i=0;i<m;i++){a.add(sc.nextInt());}for(Map.Entry x:hm.entrySet()){s1.add(x);}sort1();//对应四种排法sort2();sort3();sort4();for(int i=0;i<s1.size();i++){s1.get(i).getValue().getTemp();//对他们的temp,temp2赋值}for(int j=0;j<a.size();j++){int i=a.get(j);if(j!=a.size()-1)System.out.print(s1.get(i).getValue().temp+":"+s1.get(i).getValue().temp2+" ");elseSystem.out.print(s1.get(i).getValue().temp+":"+s1.get(i).getValue().temp2);}}public static void sort1(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->b.getValue().a1-a.getValue().a1);double same=s.get(0).getValue().a1;s.get(0).getValue().f[0]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a1==same) {s.get(i).getValue().f[0] = te;}else{s.get(i).getValue().f[0]=i;same=s.get(i).getValue().a1;te=i;}}}public static void sort2(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->b.getValue().a2-a.getValue().a2);double same=s.get(0).getValue().a2;s.get(0).getValue().f[1]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a2==same) {s.get(i).getValue().f[1] = te;}else{s.get(i).getValue().f[1]=i;same=s.get(i).getValue().a2;te=i;}}}public static void sort3(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->{if(b.getValue().a3-a.getValue().a3>0)return 1;else if(b.getValue().a3-a.getValue().a3==0)return 0;elsereturn -1;});double same=s.get(0).getValue().a3;s.get(0).getValue().f[2]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a3==same) {s.get(i).getValue().f[2] = te;}else{s.get(i).getValue().f[2]=i;same=s.get(i).getValue().a3;te=i;}}}public static void sort4(){ArrayList<Map.Entry<Integer,Person>>s=new ArrayList<>();for(Map.Entry x:hm.entrySet()){s.add(x);}Collections.sort(s,(a,b)->{if(b.getValue().a4-a.getValue().a4>0)return 1;else if(b.getValue().a4-a.getValue().a4==0)return 0;elsereturn -1;});double same=s.get(0).getValue().a4;s.get(0).getValue().f[3]=0;int te=0;for(int i=1;i<s.size();i++){if(s.get(i).getValue().a4==same) {s.get(i).getValue().f[3] = te;}else{s.get(i).getValue().f[3]=i;same=s.get(i).getValue().a4;te=i;}}}
}
class Person{//定义一个国家类int a1,a2;//分别对应四种排法double a3,a4;int []f=new int[4];int temp;//最大排名int temp2;//对应的排名方式Person(int a,int b,int c){a1=a;a2=b;a3=a/(double)c;a4=b/(double)c;}public void getTemp(){//用于获得temp,temp2int min=100000;int t=0;for(int i=0;i<f.length;i++){if(f[i]<min){min=f[i];t=i;}}temp=min+1;temp2=t+1;}
}
输入样例:
4 4
51 100 1000
36 110 300
6 14 32
5 18 40
0 1 2 3
输出样例:
1:1 1:2 1:3 1:4
PTA 奥运排行榜(java)相关推荐
- PTA 数据结构与算法分析 7-40 奥运排行榜 (25 分)
7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美 ...
- 7-20(排序) 奥运排行榜(25 分)
7-20(排序)奥运排行榜 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的奖牌 ...
- PTA(接口)用java写 7-10 房屋、住宅、写字楼类
PTA(接口)用java写 7-10 房屋.住宅.写字楼类 编写一个Java程序,能够处理房屋.住宅.写字楼的信息. 分析楼房.住宅.写字楼之间的关系,分别定义类.其中,楼房是基类,用于描述一座楼房的 ...
- 5-40 奥运排行榜 (25分)
5-40 奥运排行榜 (25分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国 ...
- 奥运排行榜详解 (25分
7-2 奥运排行榜 (25分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美国的 ...
- 7-40 奥运排行榜 (25 分)
7-40 奥运排行榜 (25 分) 每年奥运会各大媒体都会公布一个排行榜,但是细心的读者发现,不同国家的排行榜略有不同.比如中国金牌总数列第一的时候,中国媒体就公布"金牌榜":而美 ...
- java 奥运五环_[求助]求奥运五环 java代码
[求助]求奥运五环 java代码 求奥运五环 java小程序代码,急用!新手先谢过了! 搜索更多相关的解决方案: 奥运五环 java 代码 ----------------解决方案-------- ...
- PTA 超市贴花 Java代码
PTA 超市贴花 Java代码 题目详情 某家超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花.贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字.当收集到连续编号的三张贴花时, ...
- PTA(接口)用java写 7-8 USB接口的定义
PTA(接口)用java写 7-8 USB接口的定义 定义一个USB接口,并通过Mouse和U盘类实现它,具体要求是: 1.接口名字为USB,里面包括两个抽象方法: void work():描述可以工 ...
最新文章
- 图像通道、Scalar、分离、合成通道
- 中setting怎么配置_用VSCode配置Latex
- hibernate tools for eclipse plugins在线怎么安装
- php面向对象(OOP)---- 验证码类
- 解决packet tracer不能复制CLI内容的问题
- 【Scratch】青少年蓝桥杯_每日一题_2.17_城堡
- 马化腾内部分享:三个问题说透如何做产品
- cnil在python_在Python中匹配组
- 前端学习(595):使用network进行详细分析
- 中国互联网安全大会将召开 网络安全再获关注
- python魔法方法和普通方法_Python魔法方法之属性访问详解!
- word2vec -- 负采样 -- skip-gram
- python 日期操作【转】
- js创建对象的多种方式及优缺点
- ios9提取安装包ipa_iOS 应用降级与 IPA 安装包备份
- 在校大学生如何申请免费教育版 Intellij IDEA
- python单位根检验看结果_时间序列的ADF检验(单位根检验)
- Java 导出时序折线图到Excel
- 华为 - 路由交换基础
- 线性渐变与径向渐变与重复渐变
热门文章
- guacamole 源码_guacamole实现RDP的下载
- 关于软件需求开发和项目的范围管理
- 【二十四】Python全栈之路--装饰器
- Android对接第三方登陆+支付(google+facebook)
- Redis 分布式锁2
- 必备的视频创作软件:ae 2021 mac中文版 v18.2.1直装版
- 去除搜狗输入法弹窗骚扰的一个简易方法
- 红外线便携式人体测温仪方案产品说明
- 数据分析发展前景怎么样?哪些行业需要数据分析
- 单点登录cas综述之cas4.2.7服务端+cas客户端+示例程序+环境搭建说明-陈杰